2012-08-01 210 views
-1

我開始編寫Android應用程序。但我仍在爲此苦苦掙扎,儘管我在這個論壇上發現了類似的東西(here -yet checked)。當我按下按鈕時,我的應用程序崩潰。 這裏的代碼:Android應用程序使用setOnClickListener崩潰

package mobileapp; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 


public class MainActivity extends Activity implements OnClickListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     View button = (Button) findViewById(R.id.button_print_string); 
     button.setOnClickListener(this); 
    } 

    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.button_print_string: 
       EditText cerca = (EditText) findViewById(R.id.cerca); 
      Bundle bundle = new Bundle(); 
      bundle.putString("result", cerca.getText().toString()); 
      Intent Intent2 = new Intent(getApplicationContext(), SecondActivity.class); 
      startActivity(Intent2); 
     } 
    } 

}

這裏我manifest_file:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="it.stasbranger.clinigomobile" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="9" 
    android:targetSdkVersion="15" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    </activity> 

    <activity 
     android:name=".SecondActivity" > 
     <intent-filter ></intent-filter> 
    </activity> 
</application> 

</manifest> 

和我activity_main:

<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" > 


<Button 
    android:id="@+id/button_print_string" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:text="@string/str_button" /> 

<EditText android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/cerca" 
    android:inputType="textEmailAddress" 
    android:text="@string/cerca"> 
<requestFocus></requestFocus> 
</EditText> 



</RelativeLayout> 

我得到:

08-01 09:40:59.335: E/AndroidRuntime(560): FATAL EXCEPTION: main 
08-01 09:40:59.335: E/AndroidRuntime(560): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.stasbranger.clinigomobile/it.stasbranger.clinigomobile.SecondActivity}: java.lang.NullPointerException 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.os.Looper.loop(Looper.java:137) 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.app.ActivityThread.main(ActivityThread.java:4424) 
08-01 09:40:59.335: E/AndroidRuntime(560): at java.lang.reflect.Method.invokeNative(Native Method) 
08-01 09:40:59.335: E/AndroidRuntime(560): at java.lang.reflect.Method.invoke(Method.java:511) 
08-01 09:40:59.335: E/AndroidRuntime(560): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
08-01 09:40:59.335: E/AndroidRuntime(560): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
08-01 09:40:59.335: E/AndroidRuntime(560): at dalvik.system.NativeStart.main(Native Method) 
08-01 09:40:59.335: E/AndroidRuntime(560): Caused by: java.lang.NullPointerException 
08-01 09:40:59.335: E/AndroidRuntime(560): at it.stasbranger.clinigomobile.SecondActivity.onCreate(SecondActivity.java:14) 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.app.Activity.performCreate(Activity.java:4465) 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
08-01 09:40:59.335: E/AndroidRuntime(560): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
08-01 09:40:59.335: E/AndroidRuntime(560): ... 11 more 

意見建議?

+3

更好地展示你的'SecondActivity'也​​... – 2012-08-01 09:55:54

+1

**用戶必須對來發表您的SecondActivity.java類** – 2012-08-01 10:16:46

回答

0

你得到NullPointerException異常,因爲你還沒有使用的setContentView方法。

public class SecondActivity extends Activity {TextItem Text_result; ??聲明

/** Called when the activity is first created. */ 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.second_activity_xml); // CREATE XML ADD THIS 

    Bundle bundle = this.getIntent().getExtras(); 

    text_result = (TextView) findViewViewById(R.id.text_resultID); // INITIALIZE 
    text_result.setText(bundle.getString("result")); 
} 

}

+0

還必須有爲您的SecondActivity創建另一個XML。然後你需要** setContentView **方法來設置它。 – 2012-08-01 10:24:59

+0

謝謝。解決方案太簡單了,但我沒注意到。 – FrankBr 2012-08-01 11:22:13

0

SecondActivity類的第14行有一個NullPointerException。

請給我們這個類的源代碼。

0

試試這個...

Intent Intent2 = new Intent(MainActivity.this, SecondActivity.class); 
          ^^^^^^^^^^^^^^^^^ 
startActivity(Intent2); 

在你的第二個活動檢查這個

if(getIntent().getExtras().getString("result") != null) 
{ 
    textView.setText(getIntent().getExtras().getString("result")) 
} 
else 
{ 
    textView.setText("null"); 
} 
0

在你的代碼ü使用

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     View button = (Button) findViewById(R.id.button_print_string); 
     button.setOnClickListener(this); 

您正在創建視圖的對象,並使用按鈕類型轉換,而不是與對象按鈕定義按鈕。

使用方法如下.-->

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      Button button = (Button) findViewById(R.id.button_print_string); 
      button.setOnClickListener(this); 
+0

是的,我之前嘗試使用視圖類型。但沒有。 – FrankBr 2012-08-01 10:19:01