Android: Fehler liefert Ergebnis ResultInfo
Habe ich Eine Aktivität, die in TabHost
Eine startActivityForResult(B)
dann B startActivityForResult(C)
.
Das problem, die ich treffe, ist, dass:
In C, wenn ich setResult(RESULT_OK, Absicht), auftreten
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { (has extras) }} to activity {com.hackingtrace.vancexu/com.hackingtrace.vancexu.task.B}: java.lang.NullPointerException
In B, I start C durch
setTimeButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(view.getContext(), TaskTimeSet.class);
i.putExtra(TasksDbAdapter.KEY_ROWID, mRowId);
Calendar c = Calendar.getInstance();
Date d = c.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String now = sdf.format(d);
i.putExtra("date", now);
startActivityForResult(i, ACTIVITY_EDIT_TIME);
}
und in C, ich setResult von
confirmBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//TODO Auto-generated method stub
Intent intent = new Intent();
intent.putExtra("date", resultDate);
int h = timePicker.getCurrentHour();
int m = timePicker.getCurrentMinute();
String time = "" +h+":"+m;
Log.d(TAG, time);
intent.putExtra("time", time);
setResult(RESULT_OK, intent);
finish();
}
});
dann in B erhalte ich das Ergebnis von
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
Log.d(TAG, "I am in " + requestCode + resultCode);
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == ACTIVITY_EDIT_TIME) {
if (resultCode == RESULT_OK) {
Log.d(TAG, "OK time set");
String[] dateArr = intent.getStringExtra("date").split("-");
String[] timeArr = intent.getStringExtra("time").split(":");
int year = Integer.parseInt(dateArr[0]);
int month = Integer.parseInt(dateArr[1]);
int day = Integer.parseInt(dateArr[2]);
int hour = Integer.parseInt(timeArr[0]);
int minute = Integer.parseInt(timeArr[1]);
Log.d(TAG, ""+year+month+day+hour+minute);
}
}
}
Aber ich bekomme nie den "Anmelden.d(TAG, ""+Jahr+Monat+Tag+Stunde+minute);" normalerweise laufen.
Habe ich versucht:
1:
if (getParent() == null) {
setResult(Activity.RESULT_OK, intent);
}
else {
getParent().setResult(Activity.RESULT_OK, intent);
}
nicht funktionieren 🙁
2:
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
den Fehler "java.lang.RuntimeException" nicht auftreten, aber der requestCode und "resultCode" ist immer 0.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C I putExtra 2 string (resultDate und Zeit), aber ich vermisse den Punkt, dass resultDate kann nicht initialisiert werden, wenn es in der Absicht. Also ich habe den Fehler:
java.lang.NullPointerException
.Sieht es aus wie deine Aktivität B wird immer zerstört, bevor C zurück. Eine Sache, die Sie überprüfen können, ist die "Dev Tools" - app (Es ist unter den app-icons auf den meisten Emulatoren und Geräte und in den Einstellungen auf Ice Cream Sandwich mit der Bezeichnung "Entwickler-Optionen"), um sicherzustellen, dass die "Don' T keep activities" option wird nicht überprüft.
Eine Sache, die Sie tun können, um zu überprüfen, dass B immer zerstört ist, um eine Log-Anweisung aus, in der die Aktivität B
onCreate
Methode. Dann, wenn Aktivität C gestartet wird, B Ausgang C durch drücken der hardware-Zurück-Taste. Dies zerstört C (sofern Sie noch nicht überschrieben Sie die Zurück-Taste), aber es wird nicht rufen Sie BonCreate
es sei denn, B zerstört worden ist.onCreate
ist nicht immer genannt, dann die Aktivität B wird nicht zerstört.