2015-08-13 93 views
0

当我的应用程序关闭时(即用户从应用程序切换菜单中刷掉),它崩溃在onMessageReceived()应用程序在收到的gcm消息关闭时崩溃

这里的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 at com.example.myapp.chatGCM.MyGcmListenerService.onMessageReceived(MyGcmListenerService.java:52) at com.google.android.gms.gcm.GcmListenerSe rvice.zzs(Unknown Source) at com.google.android.gms.gcm.GcmListenerService.zzk(Unknown Source) at com.google.android.gms.gcm.GcmListenerService.zza(Unknown Source) at com.google .android.gms.gcm.GcmListenerService $ 1.run(Unknown Source) 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) at com.example.myapp.chatGCM。 MyGcmListenerService.onMessageReceived(MyGcmListenerService.java:52) at com.google.android.gms.g cm.GcmListenerService.zzs(Unknown Source) at com.google.android.gms.gcm.GcmListenerService.zzk(Unknown Source) at com.google.android.gms.gcm.GcmListenerService.zza(Unknown Source) at com .google.android.gms.gcm.GcmListenerService $ 1.run(Unknown Source) 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)); 
} 

所有我使用的是静态的变量和函数。这是为什么发生?

回答

0

From here您似乎有一个不可预料的行为...可能从getAppContext()功能...尝试使用getApplicationContext()来代替。

+0

你有些不对。 'getAppContext()'是'MainApplication'中的静态方法,它返回'MainApplication.context;',它在'MainApplication'的'onCreate()'中被初始化。应用程序关闭后,尚未“创建”。 –

相关问题