찾다

 >  Q&A  >  본문

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中文网2771일 전693

모든 응답(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를 전달한 후 Context가 있으면 변환이 가능합니다

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

    그리고 젊은 분들은 앞으로 코드를 작성할 때 재사용 문제를 고려해야 합니다. 두 곳 이상에서 사용하는 경우 새 변수를 만들고 값을 할당한 다음 호출할 수 있습니다. 리소스 사용량을 절약하세요. 지금은 말할 수 없어요. 처음에는 그랬어요. 이제 작업을 하다 보니, 코드를 작성하다 보니 피곤하네요. =

    아직도 모르신다면 사이트로 문의주셔도 됩니다~

    받아보세요~

    회신하다
    0
  • 취소회신하다