代码之家  ›  专栏  ›  技术社区  ›  astric mobiles

如何更好地理解错误,以便纠正错误

  •  1
  • astric mobiles  · 技术社区  · 7 年前

    我在LogCat中收到以下错误消息:

       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
    

    我知道NullPointerException是什么,但不是100%的关于如何修复传递正确上下文的问题。这个错误只发生在应用程序在后台运行(多任务)的时候,如果您能提供一些指导,我们将不胜感激。请在下面输入日志和违规代码。谢谢

    Process: com.app.app, PID: 17519
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
        at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:537)
        at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:526)
        at com.app.app.DatabaseHandling.UpdateData.<init>(UpdateData.java:70)
        at com.app.app.PushService.PushReceiver$1.run(PushReceiver.java:94)
        at java.lang.Thread.run(Thread.java:764)
    

    推送接收机

    UpdateData updateData = new UpdateData(MainActivity.mainActivity);
    

    更新数据:

     private final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.mainActivity);
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Thomas Richter    7 年前

    我想问题是,你试图初始化 共享引用sp 你应该先这样定义它:

    private SharedPreferences sp;
    

    之后,设置这个全局变量 在类似“onReceive(Context)”的函数中:

    sp = PreferenceManager.getDefaultSharedPreferences(context);
    

    或者像在函数“onCreate(…)”的活动本身中提到的那样:

    sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
    

    避免将静态变量提供的上下文从另一个类中移交。

        2
  •  1
  •   Martin Zeitler    7 年前

    最有可能的情况是(基于提供的有限示例,该示例甚至没有指明代码在哪个上下文中运行),它应该是:

    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
    

    分配时 Context 类(相似) Activity 上下文 )至 static

        3
  •  0
  •   Rohit Chauhan    7 年前

    首先你应该检查你的代码。你路过了 主活动.主活动 而不是 主活动。此 getApplicationContext()

    private final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.mainActivity);
    

    始终传递方法工作的活动上下文。。。