検索

ホームページ  >  に質問  >  本文

android - 把原来的所有代码放入新建项目后SharedPreferences报错

新建一个项目,包名与原来项目相同,再把原来所有项目复制过来,结果在getSharedPreferences中报错.代码如下

public static String getSharePreStr(String field) {
        String FILE = MyApplication.instance().getResources().getString(R.string.app_dir);
        SharedPreferences sp = (SharedPreferences) MyApplication.instance().getSharedPreferences(FILE, 0);
        String s = sp.getString(field, "");
        return s;
    }
    
    开始的时候判断是否有缓存,第一个错误是
    
Attempt to invoke virtual method 'android.content.res.Resources com.fenghua.traffic.MyApplication.getResources()' on a null object reference

于是我把String FILE = MyApplication.instance().getResources().getString(R.string.app_dir);
换成了String FILE = "XXX";
这句没错了,然后再次运行,报错

 Attempt to invoke virtual method 'android.content.SharedPreferences com.fenghua.traffic.MyApplication.getSharedPreferences(java.lang.String, int)' on a null object reference
 
 什么情况,求解,.代码是全部从原来复制过来的
PHP中文网PHP中文网2802日前710

全員に返信(3)返信します

  • 迷茫

    迷茫2017-04-17 17:20:47

    明らかに、MyApplication.instance() が初期化されているかどうかを確認します。

    返事
    0
  • 阿神

    阿神2017-04-17 17:20:47

    MyApplication.instance() は null なので、呼び出す前にチェックする必要があります。これは良い習慣であり、ログを書くのに便利だと言われています。
    コードを完全に再コンパイルしなかった可能性はありますか?アプリを削除して再構築してみてください

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 17:20:47

    MyApplication.instance() は Activity オブジェクトに置き換えられます

    ここに何もない場合は渡すことは推奨されませんが、コンテキストであるContextを渡した後、Contextがあれば変換できます。 コードは次のとおりです。

    ((getContext)Activity).getSharedPreferences......

    また、若い人たち、将来コードを書くときは、再利用の問題を考慮する必要があります。2 つ以上の場所で使用する場合は、新しい変数を作成し、値を割り当ててからそれを呼び出すことができます。リソースの使用量を節約します。今ではわかりませんが、最初はこうだったので、コードを書いた後にいろいろ変更するのに疲れました。

    まだ方法がわからない場合は、今後質問がある場合は、サイトで私に連絡してください〜

    受け入れてください~

    返事
    0
  • キャンセル返事