意图错误(Android)

时间:2011-09-27 18:08:37

标签: java android android-intent

所以这应该是非常简单的,因为我只是在这个应用程序的开始阶段。记住,我是初学者,所以请原谅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();

}

3 个答案:

答案 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.putExtra

  

将扩展数据添加到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)
    ...
    ...

当你遇到这样的错误时,你想要查看“由...引起的”行,以及之后的前几行。这将描述错误,并为您提供它出现的确切行。