0

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(); 
     } 
    }); 
} 

}

Antwort

1

Lösung gefunden

Hallo. Endlich habe ich herausgefunden, was ich falsch gemacht habe. Der Fehler lag also im Grunde bei Aktivität C, wo ich eine neue Absicht kreierte und ihr Extras hinzufügte, um sie an Aktivität A weiterzuleiten, anstatt die weitergeleitete Absicht von 2 einzufangen und Extras hinzuzufügen, um sie mit der bereits bestehenden Absicht zu verschmelzen.

Nachdem ich es geändert und eine kleine Änderung in onActivirtForResult() - Methode von Activity A vorgenommen habe, bekomme ich nun alle Werte in Activity A, die von anderen Activities eingegeben wurden.

Ich hoffe, meine Lösung wird auch anderen hilfreich sein.So sind die Änderungen wie folgt:

in CActivity:

btnNext.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent activityBIntent = getIntent(); 
      activityBIntent.putExtra("secretquestion",secretQuestion.getText().toString()); 
      activityBIntent.putExtra("secretanswer",secretAnswer.getText().toString()); 

      setResult(RESULT_OK,activityBIntent); 
      finish(); 
     } 
    }); 

und in AActivity:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch (requestCode) { 
     case ACTIVITY1: 
      if (resultCode == RESULT_OK) { 

       String value_username = data.getExtras().getString("username"); 
       String value_password = data.getExtras().getString("password"); 
       String value_secretquestion = data.getExtras().getString("secretquestion"); 
       String value_secretanswer = data.getExtras().getString("secretanswer"); 
       userDetails.setText(value_username + value_password + value_secretquestion + value_secretanswer); 
      } 
      break; 
    } 
} 
Verwandte Themen