搜尋

首頁  >  問答  >  主體

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 天前713

全部回覆(3)我來回復

  • 迷茫

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

    很明顯是MyApplication.instance()這個為空啊,看看有沒有初始化。

    回覆
    0
  • 阿神

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

    MyApplication.instance() 為null,調用前應該檢查,據說是個好習慣,也方便寫log
    有可能是你沒有完全重新編譯程式碼?把app刪掉然後rebuild試試

    回覆
    0
  • 高洛峰

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

    MyApplication.instance()換成Activity物件

    這裡如果沒有的話,不推薦傳遞,但傳遞過來Context也就是上下文後,有Context也是可以轉換一下的,程式碼如下

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

    還有,年輕人,以後寫程式碼呢,要考慮到復用的問題,如果用到兩處以上的,可以新建變數進行賦值,之後呼叫。節省資源使用。現在看不出來,我最開始也是這樣,現在參加工作了,寫完代碼後各種改,心累= =

    還是不會的話站內可以聯絡我的,以後有問題都可以問我哦~

    採納哦~

    回覆
    0
  • 取消回覆