I'm using Parse.com for push notifications. When I receive a push notification, this class executes:
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());
}
}
}
These lines:
alert = json.getString("alert").toString();
name = json.getString("name").toString();
tipo = json.getString("tipo").toString();
DatosObjecto.setAlert(alert);
DatosObjecto.setName(name);
DatosObjecto.setTipo(tipo);
When I receive the push, I'm extracting the values of "alert", "name" and "tipo". I put them in an ObjetoMensaje Object. Code:
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");
}
}
I want to serialize the values "alert", "name", and "tipo", so I've created a class for serialization:
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();
}
}
}
When I call the class, I get this error:
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
What am I doing wrong?