所以这应该是非常简单的,因为我只是在这个应用程序的开始阶段。记住,我是初学者,所以请原谅noob代码:p
每当我点击按钮进入下一页时,应用程序崩溃(强制关闭)。代码如下:
Button b = (Button) findViewById(R.id.button1);
final EditText et1 = (EditText) findViewById(R.id.editText1);
final EditText et2 = (EditText) findViewById(R.id.editText2);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(User.this, Game.class);
i.putExtra("p1", et1.getText().toString());
i.putExtra("p2", et2.getText().toString());
Toast.makeText(User.this, "Activity 2 about to launch", Toast.LENGTH_SHORT).show();
Toast.makeText(User.this, "Activity 2 launched", Toast.LENGTH_SHORT).show();
startActivity(i);
}
});
}
}
下一页如下:
TextView tv = (TextView) findViewById(R.id.textView2);
Button b1 = (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
Button b3 = (Button) findViewById(R.id.button3);
Button b4 = (Button) findViewById(R.id.button4);
Button b5 = (Button) findViewById(R.id.button5);
Button b6 = (Button) findViewById(R.id.button6);
Button b7 = (Button) findViewById(R.id.button7);
Button b8 = (Button) findViewById(R.id.button8);
Button b9 = (Button) findViewById(R.id.button9);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
Toast.makeText(Game.this, "Welcome "+getIntent().getExtras().getString("p1")+" and "+getIntent().getExtras().getString("p2"), Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:2)
你不能在findViewById
之前使用onCreate
(如果你试图用这样的值初始化,这就是你正在做的事情。)
在调用setContextView
之前,您也不应尝试解决您的观点,因为在此之前它们不属于您的布局。只有在添加后才能“找到”它们。
将初始化代码移到onCreate
方法内:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
TextView tv = (TextView) findViewById(R.id.textView2);
Button b1 = (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
Button b3 = (Button) findViewById(R.id.button3);
Button b4 = (Button) findViewById(R.id.button4);
Button b5 = (Button) findViewById(R.id.button5);
Button b6 = (Button) findViewById(R.id.button6);
Button b7 = (Button) findViewById(R.id.button7);
Button b8 = (Button) findViewById(R.id.button8);
Button b9 = (Button) findViewById(R.id.button9);
Toast.makeText(Game.this, "Welcome "+getIntent().getExtras().getString("p1")+" and "+getIntent().getExtras().getString("p2"), Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:1)
我看到一个明显的问题。
将扩展数据添加到intent中。名称必须包含包前缀,例如app com.android.contacts将使用“com.android.contacts.ShowAll”之类的名称。
i.putExtra("p1", et1.getText().toString());
“p1”没有包前缀!所以,这可能会起作用,可能无法正常工作,崩溃,或者恶魔可能会飞出你的鼻子。您应该将“p1”更改为“com.myfirstandroid.p1”,假设包名为“com.myfirstandroid”。
我无法确定这是否是您的确切问题。您应该包括崩溃的原因以获得更具体的答案。看看LogCat。
答案 2 :(得分:0)
使应用程序崩溃的一种非常常见的方法(特别是当您不熟悉Android时)是忘记在清单文件中声明一个Activity。我打赌这导致了你的错误。
您的代码看起来不错,它应该启动游戏活动。但是,即使您已正确定义Game类,除非您在清单文件中声明Game,否则它将无法工作。您的清单应该已经包含一些关于您的原始活动的代码,如下所示:
<activity android:name=".YourApplication"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这声明了一个新活动,并添加了一些过滤器,以确保它是您启动应用程序时打开的第一件事。您应确保在其下方添加如下所示的行,以便系统了解您的Game类
<activity android:name=".Game" android:label="Game">
为了将来参考和调试更复杂的错误,您需要了解LogCat。
logcat通常会使修复错误非常简单。当您收到错误时,Eclipse中的logcat输出通常看起来像这样
07-25 13:19:10.593: ERROR/AndroidRuntime(22861): FATAL EXCEPTION: main
ERROR/AndroidRuntime(22861): java.lang.RuntimeException: /some sort of error/
.../A lot of description/
...
07-25 13:19:10.593: ERROR/AndroidRuntime(22861): Caused by: /Whatever the specific error was/
07-25 13:19:10.593: ERROR/AndroidRuntime(22861):at com.chris.formStuff.FormStuffActivity.onCreate(FormStuffActivity.java:25)
...
...
当你遇到这样的错误时,你想要查看“由...引起的”行,以及之后的前几行。这将描述错误,并为您提供它出现的确切行。