当我的应用程序关闭时(即用户从应用程序切换菜单中刷掉),它崩溃在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));
}
所有我使用的是静态的变量和函数。这是为什么发生?
你有些不对。 'getAppContext()'是'MainApplication'中的静态方法,它返回'MainApplication.context;',它在'MainApplication'的'onCreate()'中被初始化。应用程序关闭后,尚未“创建”。 –