我正在使用 Parse.com 进行推送通知。当我收到推送通知时,此类执行:
public class MyCustomReceiver extends BroadcastReceiver {
protected ObjetoMensaje DatosObjecto;
protected SerializacionDeDatos Sdd;
protected String alert, fecha, name, tipo;
private static final String TAG = "MyCustomReceiver";
@Override
public void onReceive(Context context, Intent intent) {
try {
DatosObjecto = new ObjetoMensaje();
Sdd = new SerializacionDeDatos();
String action = intent.getAction();
String channel = intent.getExtras().getString("com.parse.Channel");
JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data"));
Log.d(TAG, "got action " + action + " on channel " + channel + " with:");
Iterator<?> itr = json.keys();
Log.i("","");
while (itr.hasNext()) {
String key = (String) itr.next();
Log.d(TAG, "..." + key + " => " + json.getString(key));
Log.d(TAG,"");
}
alert = json.getString("alert").toString();
name = json.getString("name").toString();
tipo = json.getString("tipo").toString();
DatosObjecto.setAlert(alert);
DatosObjecto.setName(name);
DatosObjecto.setTipo(tipo);
Sdd.Serializa(DatosObjecto); //this line, I use for call the class "SerializacionDeDatos"
} catch (JSONException e) {
Log.d(TAG, "JSONException: " + e.getMessage());
}
}
}
这些行:
alert = json.getString("alert").toString();
name = json.getString("name").toString();
tipo = json.getString("tipo").toString();
DatosObjecto.setAlert(alert);
DatosObjecto.setName(name);
DatosObjecto.setTipo(tipo);
当我收到推送时,我正在提取“alert”、“name”和“tipo”的值。我把它们放在一个 ObjetoMensaje 对象中。代码:
public class ObjetoMensaje extends Activity implements Serializable{
private static final long serialVersionUID = 5680898935329497057L;
private String alert, name, tipo;
protected String filename = "datos.dat";
public ObjetoMensaje(){};
public ObjetoMensaje(String alert, String name, String tipo){
super();
this.alert = alert;
this.name = name;
this.tipo = tipo;
}
public String getAlert(){
return alert;
}
public void setAlert(String alert){
this.alert = alert;
Log.i("Set Alert", "Excitoso");
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
Log.i("Set Name", "Excitoso");
}
public String getTipo(){
return tipo;
}
public void setTipo(String tipo){
this.tipo = tipo;
Log.i("Set tipo", "Excitoso");
}
}
我想序列化值“alert”、“name”和“tipo”,所以我创建了一个序列化类:
public class SerializacionDeDatos extends Activity{
protected String filename = "datos.dat";
protected void Serializa(ObjetoMensaje DatosObjecto){
FileOutputStream fos;
try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(DatosObjecto);
oos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
当我打电话给班级时,我收到了这个错误:
08-08 13:15:32.976: W/dalvikvm(8360): threadid=1: thread exiting with uncaught exception (group=0x4001c578)
08-08 13:15:33.070: E/AndroidRuntime(8360): FATAL EXCEPTION: main
08-08 13:15:33.070: E/AndroidRuntime(8360): java.lang.RuntimeException: Unable to start receiver mx.nivel9.apps.MyCustomReceiver: java.lang.NullPointerException
08-08 13:15:33.070: E/AndroidRuntime(8360): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1809)
08-08 13:15:33.070: E/AndroidRuntime(8360): at android.app.ActivityThread.access$2400(ActivityThread.java:117)
08-08 13:15:33.070: E/AndroidRuntime(8360): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:985)
08-08 13:15:33.070: E/AndroidRuntime(8360): at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 13:15:33.070: E/AndroidRuntime(8360): at android.os.Looper.loop(Looper.java:130)
08-08 13:15:33.070: E/AndroidRuntime(8360): at android.app.ActivityThread.main(ActivityThread.java:3687)
08-08 13:15:33.070: E/AndroidRuntime(8360): at java.lang.reflect.Method.invokeNative(Native Method)
08-08 13:15:33.070: E/AndroidRuntime(8360): at java.lang.reflect.Method.invoke(Method.java:507)
08-08 13:15:33.070: E/AndroidRuntime(8360): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
08-08 13:15:33.070: E/AndroidRuntime(8360): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
08-08 13:15:33.070: E/AndroidRuntime(8360): at dalvik.system.NativeStart.main(Native Method)
08-08 13:15:33.070: E/AndroidRuntime(8360): Caused by: java.lang.NullPointerException
08-08 13:15:33.070: E/AndroidRuntime(8360): at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:158)
08-08 13:15:33.070: E/AndroidRuntime(8360): at mx.nivel9.apps.SerializacionDeDatos.Serializa(SerializacionDeDatos.java:23)
08-08 13:15:33.070: E/AndroidRuntime(8360): at mx.nivel9.apps.MyCustomReceiver.onReceive(MyCustomReceiver.java:50)
08-08 13:15:33.070: E/AndroidRuntime(8360): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1798)
08-08 13:15:33.070: E/AndroidRuntime(8360): ... 10 more
我究竟做错了什么?