我应该询问用户姓名,年龄,电子邮件和电话号码,并在另一个活动中显示这些值。 Android开发培训(来自Google)中显示的示例对一个变量(键值对)执行了相同的操作。但是,这里我必须传递4个值。在查看如何做到这一点时,我遇到了Bundle。使用相同的,第二个活动不显示任何内容,即活动显示空白屏幕,尽管有4个textView对象。 我的代码如下:
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 :(得分:0)
您在第二个活动中传递了错误密钥,这可能是您的活动在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";
上面你已经为bundle声明了键,但是在第二个Activity中你确实错了。
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);
答案 1 :(得分:0)
您的问题是,MainActivity
您声明四个变量并且所有相同值。当您将用户输入放入Bundle时,它将始终覆盖您之前插入的值,因为只能有一个单独的键。所以你应该编辑你的变量:
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
中的变量是公共静态,您可以访问它们,而无需MainActivity
类的实例。
请注意,您可以使用变量的值访问已保存的数据,而不是它的名称。
我的提示:阅读一些Java和Android教程,尤其是Java教程;)