2017-04-08 8 views
1

ユーザに名前、年齢、電子メール、電話番号を尋ね、別のアクティビティに値を表示することになっています。 Android開発トレーニング(Googleから)に示されている例は、1つの変数(キーと値のペア)で同じ結果を出しました。ただし、ここでは4つの値を渡す必要があります。それを行う方法を見上げると、私はBundleを見つけました。同じものを使用すると、2番目のアクティビティには何も表示されません。つまり、アクティビティには空白の画面が表示され、4つのtextViewオブジェクトがあることを覚えています。 次のように私のコードが行く:Androidからの値を受け入れて次のアクティビティに表示する

MainActivity.java

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 

public class MainActivity extends AppCompatActivity { 

public static final String EXTRA_MESSAGE_NAME="com.example.myfirstapp.MESSAGE"; 
public static final String EXTRA_MESSAGE_AGE="com.example.myfirstapp.MESSAGE"; 
public static final String EXTRA_MESSAGE_EMAIL="com.example.myfirstapp.MESSAGE"; 
public static final String EXTRA_MESSAGE_PH="com.example.myfirstapp.MESSAGE"; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
public void sendMessage(View view) { 
    Bundle extras=new Bundle(); 
    Intent intent = new Intent(this, DisplayMessageActivity.class); 
    EditText editText = (EditText) findViewById(R.id.editText); 
    String message = editText.getText().toString(); 
    extras.putString(EXTRA_MESSAGE_NAME, message); 
    EditText editText2 = (EditText) findViewById(R.id.editText7); 
    message=editText2.getText().toString(); 
    extras.putString(EXTRA_MESSAGE_AGE, message); 
    EditText editText3 = (EditText) findViewById(R.id.editText5); 
    message=editText3.getText().toString(); 
    extras.putString(EXTRA_MESSAGE_EMAIL, message); 
    EditText editText4=(EditText)findViewById(R.id.editText6); 
    message=editText4.getText().toString(); 
    extras.putString(EXTRA_MESSAGE_PH, message); 
    intent.putExtras(extras); 
    startActivity(intent); 
} 
} 

二アクティビティ、DisplayMessageActivity:

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

import org.w3c.dom.Text; 

public class DisplayMessageActivity extends AppCompatActivity { 

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

    Intent intent=getIntent(); 
    Bundle extras=intent.getExtras(); 
    String message=extras.getString("EXTRA_MESSAGE_NAME"); 
    String message1=extras.getString("EXTRA_MESSAGE_AGE"); 
    String message2=extras.getString("EXTRA_MESSAGE_EMAIL"); 
    String message3=extras.getString("EXTRA_MESSAGE_PH"); 

    TextView textView= (TextView)findViewById(R.id.textView); 
    textView.setText(message); 

    TextView textView2=(TextView)findViewById(R.id.textView2); 
    textView2.setText(message1); 
    TextView textView3=(TextView)findViewById(R.id.textView3); 
    textView3.setText(message2); 
    TextView textView4=(TextView)findViewById(R.id.textView4); 
    textView4.setText(message3); 
} 
} 

をactivity_main.xml:

<EditText 
    android:id="@+id/editText" 
    android:layout_width="270dp" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:layout_marginTop="16dp" 
    android:hint="@string/edit_name" 
    android:inputType="textPersonName" 
    app:layout_constraintHorizontal_bias="0.5" 
    app:layout_constraintHorizontal_chainStyle="spread" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" /> 

<Button 
    android:id="@+id/button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="sendMessage" 
    android:text="@string/button_send" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    android:layout_marginTop="16dp" 
    app:layout_constraintTop_toBottomOf="@+id/editText6" 
    app:layout_constraintHorizontal_bias="0.501" /> 

<EditText 
    android:id="@+id/editText5" 
    android:layout_width="270dp" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:layout_marginTop="16dp" 
    android:ems="10" 
    android:hint="@string/edit_email" 
    android:inputType="textEmailAddress" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/editText7" /> 

<EditText 
    android:id="@+id/editText6" 
    android:layout_width="270dp" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:layout_marginTop="16dp" 
    android:ems="10" 
    android:hint="@string/edit_ph" 
    android:inputType="phone" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/editText5" /> 

<EditText 
    android:id="@+id/editText7" 
    android:layout_width="270dp" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:layout_marginTop="16dp" 
    android:ems="10" 
    android:hint="@string/edit_age" 
    android:inputType="number" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/editText" /> 
</android.support.constraint.ConstraintLayout> 

activity_display_message.xml:

<TextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:layout_marginTop="16dp" 
    android:text="TextView" 
    android:textColor="@android:color/background_dark" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" /> 

<TextView 
android:id="@+id/textView2" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="TextView" 
app:layout_constraintLeft_toLeftOf="parent" 
app:layout_constraintRight_toRightOf="parent" 
android:layout_marginTop="16dp" 
app:layout_constraintTop_toBottomOf="@+id/textView" /> 

<TextView 
    android:id="@+id/textView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    android:layout_marginTop="16dp" 
    app:layout_constraintTop_toBottomOf="@+id/textView2" /> 

<TextView 
    android:id="@+id/textView4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    android:layout_marginTop="16dp" 
    app:layout_constraintTop_toBottomOf="@+id/textView3" /> 
</android.support.constraint.ConstraintLayout> 

このに関するすべてのヘルプは理解されるであろう。私はAndroidでプログラミングするのがとても新しいので、愚かな間違いをした場合は私に言い訳をして、自由に指摘してください。ありがとうございました:)

答えて

0

アクティビティがクラッシュする可能性があります2番目のアクティビティに間違ったキーがありますOncreate()

public static final String EXTRA_MESSAGE_NAME="com.example.myfirstapp.MESSAGE"; 
public static final String EXTRA_MESSAGE_AGE="com.example.myfirstapp.MESSAGE"; 
public static final String EXTRA_MESSAGE_EMAIL="com.example.myfirstapp.MESSAGE"; 
public static final String EXTRA_MESSAGE_PH="com.example.myfirstapp.MESSAGE"; 

上記では、バンドルのキーが宣言されていますが、2回目のアクティビティで間違えました。

Intent intent=getIntent(); 
    Bundle extras=intent.getExtras(); 
    String message=extras.getString("EXTRA_MESSAGE_NAME"); 
    String message1=extras.getString("EXTRA_MESSAGE_AGE"); 
    String message2=extras.getString("EXTRA_MESSAGE_EMAIL"); 
    String message3=extras.getString("EXTRA_MESSAGE_PH"); 

次の行以下のようにキーを渡す必要があります:

String message=extras.getString(MainActivity.EXTRA_MESSAGE_NAME); 
+0

はどうもありがとうございました!働いた! :D –

0

あなたの問題は、あなたのMainActivityにあなたはすべての同じ値4つの変数を宣言すること、です。ユーザー入力をバンドルに入れると、の1つの個別キーしか存在しないため、以前に挿入した値は常に上書きされます。だから、あなたは、変数を編集する必要があります。

public static final String EXTRA_MESSAGE_NAME="com.example.myfirstapp.MESSAGE_NAME"; 
public static final String EXTRA_MESSAGE_AGE="com.example.myfirstapp.MESSAGE_AGE"; 
public static final String EXTRA_MESSAGE_EMAIL="com.example.myfirstapp.MESSAGE_EMAIL"; 
public static final String EXTRA_MESSAGE_PH="com.example.myfirstapp.MESSAGE_PH"; 


次の問題は、あなたDisplayMessageActivityクラスです。 MainActivityに挿入したデータを、MainActivityで宣言したという名前のという名前で取得しようとしています。このため、getString()メソッドはnullを返します。変数名のキーがないためです。 という値のの値を持つデータを取得する必要があります。これによると、このようにコードを変更します。

String message=extras.getString(MainActivity.EXTRA_MESSAGE_NAME); 
String message1=extras.getString(MainActivity.EXTRA_MESSAGE_AGE); 
String message2=extras.getString(MainActivity.EXTRA_MESSAGE_EMAIL); 
String message3=extras.getString(MainActivity.EXTRA_MESSAGE_PH); 

あなたMainActivity内の変数は、のpublic staticあるとして、あなたはMainActivityクラスのインスタンスを必要とせずにそれらにアクセスすることができます。

だから、名前あなたは変数値で保存されたデータにアクセスできることを、心に留めておくとありません。


私からのヒント:いくつかのJavaとAndroidのチュートリアル、特にJavaのチュートリアルを読む;)

関連する問題