应用程序在关闭时收到的gcm消息崩溃

时间:2015-08-13 18:28:31

标签: android android-asynctask google-cloud-messaging

当我的应用程序关闭时(即用户从应用程序切换菜单中删除),它会在onMessageReceived()中崩溃。

这是onMessageReceived()

@Override
public void onMessageReceived(String from, Bundle data) {
    String message = data.getString("message");
    from = data.getString("sender");

    File notificationsFile = Constants.getNotificationsFlagFile();
    ...
}

它在最后一行崩溃,给出null pointer exception

  

08-13 21:15:25.535 23201-23216 / com.example.myapp E / AndroidRuntime:   致命异常:AsyncTask#1 java.lang.ExceptionInInitializerError           在com.example.myapp.chatGCM.MyGcmListenerService.onMessageReceived(MyGcmListenerService.java:52)           在com.google.android.gms.gcm.GcmListenerService.zzs(未知来源)           在com.google.android.gms.gcm.GcmListenerService.zzk(未知来源)           在com.google.android.gms.gcm.GcmListenerService.zza(未知来源)           在com.google.android.gms.gcm.GcmListenerService $ 1.run(未知来源)           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)           at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573)           at java.lang.Thread.run(Thread.java:841)引起:java.lang.NullPointerException           at helpers.Constants。(Constants.java:54)   在com.example.myapp.chatGCM.MyGcmListenerService.onMessageReceived(MyGcmListenerService.java:52)   在com.google.android.gms.gcm.GcmListenerService.zzs(未知来源)   在com.google.android.gms.gcm.GcmListenerService.zzk(未知来源)   在com.google.android.gms.gcm.GcmListenerService.zza(未知来源)   在com.google.android.gms.gcm.GcmListenerService $ 1.run(未知来源)   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)   at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573)   在java.lang.Thread.run(Thread.java:841)

这里是getNotificationsFlagFile()

public static File getNotificationsFlagFile()
{
    return new File(MainApplication.getAppContext().getFilesDir(), "notifications_"+getSession());
}

最后:

private static String getSession()
{
    File file = new File(MainApplication.getAppContext().getFilesDir(), "session");
    int length = (int) file.length();
    byte[] bytes = new byte[length];
    FileInputStream in = null;
    try {
        in = new FileInputStream(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    try {
        try {
            in.read(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
    } finally {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return (new String(bytes));
}

我所使用的只是静态变量和函数。为什么会这样?

1 个答案:

答案 0 :(得分:0)

From here您似乎有不期望的行为......可能来自getAppContext()函数...尝试使用getApplicationContext()代替。