Android 在活动之间传输数据时出现问题。应用程序停止对按钮单击的操作
我在屏幕之间传输数据时遇到问题。 我使用了意图。 下面是我的代码 这是我的父类中的代码:Android 在活动之间传输数据时出现问题。应用程序停止对按钮单击的操作,android,Android,我在屏幕之间传输数据时遇到问题。 我使用了意图。 下面是我的代码 这是我的父类中的代码: final EditText ed1= (EditText) findViewById(R.id.EditText05); Button b = (Button) findViewById(R.id.submit); b.setOnClickListener(new OnClickListener() { @Override publi
final EditText ed1= (EditText) findViewById(R.id.EditText05);
Button b = (Button) findViewById(R.id.submit);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(S1.this,S2.class);
i.putExtra("ed1",ed1.getText().toString());
startActivity(i);
}
});
这是my child类中的一个代码:
TextView tv = (TextView)findViewById(R.id.yo);
tv.setText(getIntent().getExtras().getString("ed1"));
当我运行应用程序时,它停止工作,并在logcat中显示以下内容:
04-11 21:32:32.698: E/AndroidRuntime(923): FATAL EXCEPTION: main
04-11 21:32:32.698: E/AndroidRuntime(923): Process: com.app.experiment, PID: 923
04-11 21:32:32.698: E/AndroidRuntime(923): java.lang.NullPointerException
04-11 21:32:32.698: E/AndroidRuntime(923): at com.app.experiment.S1$1.onClick(S1.java:56)
04-11 21:32:32.698: E/AndroidRuntime(923): at android.view.View.performClick(View.java:4424)
04-11 21:32:32.698: E/AndroidRuntime(923): at android.view.View$PerformClick.run(View.java:18383)
04-11 21:32:32.698: E/AndroidRuntime(923): at android.os.Handler.handleCallback(Handler.java:733)
04-11 21:32:32.698: E/AndroidRuntime(923): at android.os.Handler.dispatchMessage(Handler.java:95)
04-11 21:32:32.698: E/AndroidRuntime(923): at android.os.Looper.loop(Looper.java:137)
04-11 21:32:32.698: E/AndroidRuntime(923): at android.app.ActivityThread.main(ActivityThread.java:4998)
04-11 21:32:32.698: E/AndroidRuntime(923): at java.lang.reflect.Method.invokeNative(Native Method)
04-11 21:32:32.698: E/AndroidRuntime(923): at java.lang.reflect.Method.invoke(Method.java:515)
04-11 21:32:32.698: E/AndroidRuntime(923): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
04-11 21:32:32.698: E/AndroidRuntime(923): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
04-11 21:32:32.698: E/AndroidRuntime(923): at dalvik.system.NativeStart.main(Native Method)
这是我的xml文件,其中有一个按钮:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/Starters"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ListView
android:id="@+id/android:list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/submit"
android:visibility="invisible" />
<Button
android:id="@+id/submit"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/Submit" />
</RelativeLayout>
这是我的SingleContactActivity.class:
public class SingleContactActivity extends Activity {
private static final String TAG_Name = "Name";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.textview);
Intent in = getIntent();
String name = in.getStringExtra(TAG_Name);
TextView lblName = (TextView) findViewById(R.id.name);
lblName.setText(name);
}}
我相信EditText.getText可以返回null。对于Android和Java,因为大多数错误都会使程序崩溃,学习测试所有内容,并记录意外情况 对onclick侦听器尝试以下操作:
if(ed1 != null){
CharSequence charSequence = ed1.getText();
if(text != null){
text = charSequence.toString();
Intent i = new Intent(S1.this,S2.class);
i.putExtra("ed1",text);
startActivity(i);
} else {
Log.d("DEBUG", "text is null");
}
} else {
Log.d("DEBUG", "ed1 is null");
}
另一块可能是这样的:
TextView tv = (TextView)findViewById(R.id.yo);
if(tv != null){
Bundle extras = getIntent().getExtras();
if(extras != null){
String text = extras.getString("ed1");
if(text != null){
tv.setText(text);
} else {
Log.d("DEBUG", "text is null");
}
} else {
Log.d("DEBUG", "extras is null")
}
} else {
Log.d("DEBUG", "tv is null");
}
我认为您不能将EditText声明为final,因为这意味着它不会记住新文本,并且它将始终指向为null的初始化值,因此您有nullpointer异常。试着在ed1的公告中通过决赛,现在让我们来。您已经获得了NPE。Post活动代码和xml文件。u在onClick上得到一个NullPointerException。这可能是因为ed1为空,ID键入是否正确?顺便说一句,您可以在运行时按debug按钮一步一步地进行,看看发生了什么以及为什么会发生这种情况。这是一个非常典型的错误,您应该学会自己调试它。当您试图在ed1.getText.toString行中检索一个值时,您会得到NPE。我已经发布了xml now@OnikI已经声明edittext为最终版本。请把我的代码称为类文件,我已经发布了这一部分。我想你们不能将你们的EditText声明为final,因为这意味着它不会记住新的文本,这是不正确的。声明它为final将意味着该变量不能重新分配给另一个实例,但它不会影响EditText的行为。@Big MoMo。好吧,我想我明白我错在哪里了:final意味着你不能在一个实例中修改它,所以当然你可以编辑它,即使你声明它是final并记住它。但也许我并不是完全错了,因为若你们一开始就记住null,你们可以得到NullPointErrorException,或者不?请告诉我。谢谢你的更正。你能为这篇文章提供更多的上下文吗?不,这就是答案。它返回null,OP认为它不能返回,因此取消引用它,导致异常。
public class S2 extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yo);
TextView tv = (TextView)findViewById(R.id.edit_text_06);
tv.setText(getIntent().getExtras().getString("ed1"));
} }
public class SingleContactActivity extends Activity {
private static final String TAG_Name = "Name";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.textview);
Intent in = getIntent();
String name = in.getStringExtra(TAG_Name);
TextView lblName = (TextView) findViewById(R.id.name);
lblName.setText(name);
}}
if(ed1 != null){
CharSequence charSequence = ed1.getText();
if(text != null){
text = charSequence.toString();
Intent i = new Intent(S1.this,S2.class);
i.putExtra("ed1",text);
startActivity(i);
} else {
Log.d("DEBUG", "text is null");
}
} else {
Log.d("DEBUG", "ed1 is null");
}
TextView tv = (TextView)findViewById(R.id.yo);
if(tv != null){
Bundle extras = getIntent().getExtras();
if(extras != null){
String text = extras.getString("ed1");
if(text != null){
tv.setText(text);
} else {
Log.d("DEBUG", "text is null");
}
} else {
Log.d("DEBUG", "extras is null")
}
} else {
Log.d("DEBUG", "tv is null");
}