Meine App ist eine grundlegende Login-App, die am Ende alle Werte Benutzereingaben für die Felder in anderen Aktivitäten darstellt. Ich arbeite mit Absichtsobjekten und Flags. Die Aktivitäten verwenden:Übergeben von Extras zwischen Aktivitäten und Weiterleiten an eine einzelne Aktivität
- Absicht Extras die Schlüsselwerte zu speichern,
- FLAG_ACTIVITY_FORWARD_RESULT
- startActivityForResult() und onActivityForResult() -Methoden
Aktivitäten So, genannt als AActivity, BActivity, Caactivity und der Navigationsfluss muss sein: A → B → C → A mit den Ergebnissen von B und C.
Mein Verständnis mit der Logik des Codes ist, dass dies An sagt Droide, dass Aktivität 3 sollte sein Ergebnis zurück zu der Aktivität, die Aktivität 2 genannt, die Aktivität 1 in diesem Fall ist. Und auch wenn Aktivität 3 sein Ergebnis festlegt und beendet, wird onActivityResult() in Aktivität 1 mit den von Aktivität 3 gesendeten Ergebnisdaten aufgerufen.
Wenn ich jedoch die App starte, bekomme ich die Ergebnisse von nur Aktivität 3, erhalten Sie jedoch null von Aktivität 2, die in TextView in Aktivität 1 als null, null, valueC, valueC angezeigt wird, wie im Bild gezeigt. click for the image
Ich googelte und suchte nach ähnlichen Problemen, aber konnte das Problem nicht lösen.
Vielen Dank im Voraus für Ihre Hilfe
Hier meine Codes sind:
AActivity:
public class AActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
Button btnStart;
TextView userDetails;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
userDetails = (TextView) findViewById(R.id.userdetails);
btnStart = (Button) findViewById(R.id.btnstart);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent activityAIntent = new Intent(AActivity.this, BActivity.class);
startActivityForResult(activityAIntent, REQUEST_CODE);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == REQUEST_CODE) && (resultCode == RESULT_OK)) {
String return_userName = data.getExtras().getString("username");
String return_userPassword = data.getExtras().getString("password");
String return_secretQuestion = data.getExtras().getString("secretquestion");
String return_secretAnswer = data.getExtras().getString("secretanswer");
userDetails.setText("Your details: " + return_userName + "," + return_userPassword +
"," + return_secretQuestion + "," + return_secretAnswer);
}
}
}
BActivity:
public class BActivity extends AppCompatActivity {
EditText userName,userPassword;
Button btnCancel,btnNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
userName=(EditText)findViewById(R.id.username);
userPassword=(EditText)findViewById(R.id.userpassword);
btnCancel=(Button)findViewById(R.id.btncancel);
btnNext=(Button)findViewById(R.id.btnnext);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent_back_to_a = new Intent(BActivity.this,AActivity.class);
startActivity(intent_back_to_a);
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent activityCIntent = new Intent(BActivity.this,CActivity.class);
activityBIntent.putExtra("username",userName.getText().toString());
activityBIntent.putExtra("password",userPassword.getText().toString());
intent_to_c.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(activityBIntent);
finish();
}
});
}
}
CActivity:
public class CActivity extends AppCompatActivity {
EditText secretQuestion, secretAnswer;
Button btnCancel,btnNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_c);
secretQuestion =(EditText)findViewById(R.id.secretquestion);
secretAnswer =(EditText)findViewById(R.id.secretanswer);
btnCancel =(Button)findViewById(R.id.btncancel);
btnNext =(Button)findViewById(R.id.btnnext);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent_back_to_a = new Intent(CActivity.this,AActivity.class);
startActivity(intent_back_to_a);
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent data = new Intent(CActivity.this,AActivity.class);
data.putExtra("secretquestion",secretQuestion.getText().toString());
data.putExtra("secretanswer",secretAnswer.getText().toString());
setResult(RESULT_OK,data);
finish();
}
});
}
}