2

プッシュ通知に 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

私は何を間違っていますか?

4

2 に答える 2