2017-12-29 46 views
1

Ich mache eine Formular-App, die Informationen sammelt und in einer E-Mail sendet. MainActivity sammelt Telefonnummer #, dann eine Warnmeldung Aktivität, dann Name Aktivität etc. Das Problem, das ich habe, ist das Senden der Daten aus den EditText Felder zu den endgültigen AgreementActivity zu senden als eine E-Mail ist nicht für mich arbeiten. Ich habe überall gesucht, aber ich kann nicht herausfinden, wie man den Benutzer zur nächsten Aktivität schickt, während er die Eingabedaten an die abschließende Vereinbarung sendet, damit er in einer E-Mail gesendet werden kann.Verwendung mehrerer Absichten mit verschiedenen Aktivitäten und endgültigen E-Mail-Absichten

Das ist was ich bisher habe.

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    // Find the next button 
    final Button next1 = (Button) findViewById(R.id.button); 

    // Find the Edit Text Field to input Phone Number 
    final EditText phoneField = (EditText) findViewById(R.id.edit_text_phone); 

    // Set a click listener on the next button 
    next1.setOnClickListener(new View.OnClickListener() { 
     // The code in this method will be executed when the next1 Button is clicked on. 
     @Override 
     public void onClick(View view) { 

      // sends data collected from edit text box to be sent to final page so it can be 
      // sent in an email message. 

      Intent phoneNumber = new Intent(MainActivity.this, AgreementActivity.class); 
      phoneNumber.putExtra("phoneMessage", phoneField.getText().toString()); 
      startActivity(phoneNumber); 

      //starts next activity 
      Intent nextButton = new Intent(MainActivity.this, Warning.class); 
      startActivity(nextButton); 
     } 
    }); 

} 

}

Dies ist die letzte Vereinbarung Aktivität, wo es eine E-Mail senden. Aber das Endergebnis in der E-Mail-Betreffzeile "Ihre Telefonnummer ist null"

public class AgreementActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.agreement_activity); 


    // Find the submit button 
    final Button submit = (Button) findViewById(R.id.button6); 


    // This is the input from user for phone number field 
    final Bundle phoneNumber = getIntent().getExtras(); 



    // Set a click listener on that View 
    submit.setOnClickListener(new View.OnClickListener() { 
     // The code in this method will be executed when the Submit Button is clicked on. 
     @Override 
     public void onClick(View view) { 



      Intent intent = new Intent(Intent.ACTION_SENDTO); 
      intent.setData(Uri.parse("mailto:")); 
      intent.getBundleExtra("phoneMessage"); 
      intent.putExtra(Intent.EXTRA_SUBJECT, "Your Phone Number is " + phoneNumber); 

      if (intent.resolveActivity(getPackageManager()) != null) { 
       startActivity(intent); 
      } 


     } 


    }); 
} 

}

+0

Unklar, was dort gefragt wird. –

+0

Dies wäre viel einfacher, wenn Sie eine Aktivität statt drei hätten. Das heißt ... in 'phoneNumber.putExtra '(" phoneMessage ", phoneField.getText(). ToString())' fügen Sie dem 'Intent' einen zusätzlichen Namen namens' phoneMessage' hinzu. Der Wert ist ein 'String'. In 'intent.getBundleExtra (" phoneMessage ")' versuchen Sie, ein 'Bündel' mit dem Namen' phoneMessage' als Extra zu erhalten. Es gibt jedoch kein Bündel namens 'phoneMessage'. Wie [Kehinde darauf hinweist] (https://stackoverflow.com/a/48029750/115145), müssen Sie 'getStringExtra()', nicht 'getBundleExtra()' verwenden. – CommonsWare

+0

Ja, ich würde zustimmen, dass eine Aktivität, die gescrollt wurde einfacher gewesen wäre, aber da ich wollte, dass die Benutzer Informationen auf dem Formular einen Bildschirm nach dem anderen eingeben, machte ich mehrere Aktivitäten. Ich bin mir sicher, dass es einen besseren Weg gibt. Ich habe jedoch nur für 1 Monat codiert. –

Antwort

1

In Ihrem AgreementActivity erhalten Sie die Telefonnummer mit:

final String phoneNumber = getIntent().getStringExtra("phoneMessage");

+0

Ich habe diesen Code anstelle von Bundle verwendet, aber der String kommt immer noch als Null, sobald ich zur letzten Aktivität komme und die E-Mail starte –

+0

@JoshuaEdgar Aber AgreementActivity ist die letzte Aktivität richtig? –

+0

Ja ist es. Ich habe insgesamt 8 Aktivitäten. Ich zeige nur die Hauptaktivität (Telefonnummer) und dann die Vereinbarung Aktivität (wo es die Informationen aus allen anderen übermittelt) –

Verwandte Themen