0

あるアクティビティから別のアクティビティにオブジェクトを渡すのが好きです。Serializable を実装しました。しかし、どういうわけか、オブジェクトが渡されず、受信側で NULL が返されます。どこが間違っているか確認できますか?

public class TrackerInfo implements Serializable{
  /**
 * 
 */
private static final long serialVersionUID = 1L;
   String Idnumber;
  String Simcardnumber;
  String Description;
  String Model;
  String time;

  public String getSimcardnumber() {
      return Simcardnumber;
  }

  public String getDescription() {
      return Description;
  }

  public String getModel() {
      return Model;
  }
  public void setModel(String model) {
      this.Model = model;
  }

  public String getTime() {
      return time;
  }

  public void setInforFromCursor(Cursor cursor){
      this.Idnumber = cursor.getString(1);
      this.Simcardnumber = cursor.getString(2);
      this.Description = cursor.getString(3);
      this.Model = cursor.getString(4);
      this.time = cursor.getString(5);
  }}

送信側では、

@Override
    public void itemSelected(String id) {
        //get Tracker info
        dbHelper = new TrackerDBAdapter(this);
        dbHelper.open();
        Cursor cursor = dbHelper.fetchListByIDNum(id);
        TrackerInfo tracker = new TrackerInfo();
        tracker.setInforFromCursor(cursor);
        dbHelper.close();
        LinkedHashMap<String, Object> obj = new LinkedHashMap<String, Object>();
        obj.put("TRAKCER", tracker);
        Bundle b = new Bundle();
        b.putSerializable("bundleobj", obj);
        Intent intent = new Intent(this, DetailMapView.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.putExtra("bundleobj", b);
        startActivity(intent);

    }

受信側では、

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    //setContentView(R.layout.activity_detail_map_view);
    try {  setContentView(R.layout.activity_detail_map_view);
         Bundle bn = new Bundle();
         bn = getIntent().getExtras();
         HashMap<String, Object> getobj = new HashMap<String, Object>();
         getobj = (HashMap<String, Object>) bn.getSerializable("bundleobj");
         trackerinfo = (TrackerInfo) getobj.get("TRACKER");
    } catch (Exception e) {
         Log.e("Err", e.getMessage());
    }}
4

2 に答える 2

2

あなたの問題はここにあると思います:

obj.put("TRAKCER", tracker);

HashMapキーでトラッカーを追加していますTRAKCER

しかし、ここで:

getobj.get("TRACKER");

キーでオブジェクトを取得しようとしてTRACKERいますが、キーが等しくなく、これが原因ですNPE。修正する必要があります

obj.put("TRACKER", tracker);

キーが等しいので、動作するはずです。

アップデート:

@Sam が指摘したように、HashMapBundle と Bundle into Intent にラップしました。したがって、アプローチがうまくいった場合は、次のことを行う必要があります。

LinkedHashMap<String, Object> obj = new LinkedHashMap<String, Object>();
obj.put("TRACKER", tracker);

Bundle b = new Bundle();
b.putSerializable("trackerObj", obj);

Intent intent = new Intent(this, DetailMapView.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("bundleObj", b);

そして取得するためにHashMap

Bundle wrapper = getIntent().getBundleExtra("bundleObj"); // this Bundle contains HashMap
HashMap<String, Object> obj = (HashMap<String, Object>) wrapper.getSerializable("trackerObj");

おすすめ:

@Sam が再び指摘した方法は、メソッドを使用してHashMapas Serializable を Intent に直接ラップし、次のputExtra("trackerObj", obj)ように簡単に取得することです。

HashMap<String, Object> o = (HashMap<String, Object>) getIntent().getSerializableExtra("trackerObj");
于 2013-03-29T16:29:05.820 に答える
1

いくつかの間違いがあります。Sajmon's answerを読んでください。ただし、バンドルをバンドルに入れていますが、外側のバンドルからのみ読み取っています。次のようなコードを削除します。

Bundle b = new Bundle();
b.putSerializable("bundleobj", obj);

データを Intent に直接入れます。

Intent intent = new Intent(this, DetailMapView.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("bundleobj", obj);

// You may need to help the compiler by casting it to a Serializable
//intent.putExtra("bundleobj", (Serializable) obj);

double Bundle メソッドを使用するには、両方の「bundleobj」タグを取得する必要があります。

 bn = getIntent().getExtras().getBundle("bundleobj");
 HashMap<String, Object> getobj = (HashMap<String, Object>) bn.getSerializable("bundleobj");
于 2013-03-29T16:35:15.503 に答える