あるアクティビティと別のアクティビティの間で TreeMap を渡そうとしています。TreeMap のタイプは TreeMap> です。
Trip Serializable および Parcelable を作成しようとしましたが、動作しません。また、onSaveInstanceState 中にマップをバンドルに追加し、onRestoreInstanceState 中にマップを正常に再開しますが、アクティビティ間では再開しません。
トリップの定義はこちら
package stations;
import java.io.IOException;
import java.io.Serializable;
import android.text.format.Time;
public class Trip implements Serializable {
private static final long serialVersionUID = 1L;
Time m_time = new Time();
public Trip()
{
m_time.setToNow();
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
out.writeLong(m_time.toMillis(false));
}
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
m_time = new Time();
m_time.set(in.readLong());
}
}
この部分はうまく機能します:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putSerializable(PERSONAL_SET_STR, m_personalSet);
super.onSaveInstanceState(savedInstanceState);
}
@SuppressWarnings("unchecked")
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
m_personalSet = (TreeMap<Integer,Vector<Trip>>)savedInstanceState.getSerializable(PERSONAL_SET_STR);
Toast.makeText(this, "on Restore " + m_personalSet.size(), Toast.LENGTH_SHORT).show();
}
2番目のアクティビティを開始する方法は次のとおりです
Intent intent = new Intent(this, SecondActivity.class);
Bundle b = new Bundle();
b.putSerializable(PERSONAL_SET_STR, m_personalSet);
intent.putExtras(b);
startActivity(intent);
これが SecondActivity の OnCreate です
@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle b = getIntent().getExtras();
//This next line throws an exception
m_personalSet = (TreeMap<Integer,Vector<Trip>>)b.getSerializable(FirstActivity.PERSONAL_SET_STR);
}
ログ キャット: 05-21 16:34:24.086: E/AndroidRuntime(17343): java.lang.RuntimeException: アクティビティ ComponentInfo{com.me.atme/analysis.SecondClass} を開始できません: java.lang.ClassCastException: java .util.HashMap は java.util.TreeMap にキャストできません
TreeMap ではなく HashMap としてバンドルから出てくる理由はありますか? なぜ2つの活動の間だけなのですか?
ありがとう