2011-12-28 101 views
1

在模擬器中測試我的應用程序時(我正在使用Eclipse)它向我顯示「應用程序Counter(com.ian.counter)已意外停止,請重試。運行時。我搜索了一個答案,但我找不到答案。任何人都知道問題?Android應用程序在運行時意外停止

代碼:

package com.ian.counter; 

import android.app.Activity; 
import android.widget.TextView; 
import android.os.Bundle; 
import android.widget.Toast; 

public class CounterActivity extends Activity { 
    /** Called when the activity is first created. */ 
    TextView textView1 = (TextView) this.findViewById(R.id.textView1); 
    int count = 0; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public void Count(){ 
     count ++; 
     textView1.setText(Integer.toString(count)); 
    } 
} 

的logcat:

12-28 16:59:20.615: D/AndroidRuntime(353): Shutting down VM 
12-28 16:59:20.686: W/dalvikvm(353): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
12-28 16:59:20.756: E/AndroidRuntime(353): FATAL EXCEPTION: main 
12-28 16:59:20.756: E/AndroidRuntime(353): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.ian.counter/com.ian.counter.CounterActivity}: java.lang.NullPointerException 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569) 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.os.Looper.loop(Looper.java:123) 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.app.ActivityThread.main(ActivityThread.java:3683) 
12-28 16:59:20.756: E/AndroidRuntime(353): at java.lang.reflect.Method.invokeNative(Native Method) 
12-28 16:59:20.756: E/AndroidRuntime(353): at java.lang.reflect.Method.invoke(Method.java:507) 
12-28 16:59:20.756: E/AndroidRuntime(353): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
12-28 16:59:20.756: E/AndroidRuntime(353): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
12-28 16:59:20.756: E/AndroidRuntime(353): at dalvik.system.NativeStart.main(Native Method) 
12-28 16:59:20.756: E/AndroidRuntime(353): Caused by: java.lang.NullPointerException 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.app.Activity.findViewById(Activity.java:1647) 
12-28 16:59:20.756: E/AndroidRuntime(353): at com.ian.counter.CounterActivity.<init>(CounterActivity.java:10) 
12-28 16:59:20.756: E/AndroidRuntime(353): at java.lang.Class.newInstanceImpl(Native Method) 
12-28 16:59:20.756: E/AndroidRuntime(353): at java.lang.Class.newInstance(Class.java:1409) 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
12-28 16:59:20.756: E/AndroidRuntime(353): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561) 

任何幫助表示讚賞。

回答

1

您正試圖在佈局設置之前設置textView1變量。您需要將其定義爲變量,然後在調用setContentView()之後將其指定爲onCreate()。就像這樣:

package com.ian.counter; 

import android.app.Activity; 
import android.widget.TextView; 
import android.os.Bundle; 
import android.widget.Toast; 

public class CounterActivity extends Activity { 
    /** Called when the activity is first created. */ 
    TextView textView1; 
    int count = 0; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     textView1 = (TextView) this.findViewById(R.id.textView1); 
    } 

    public void Count(){ 
     count ++; 
     textView1.setText(Integer.toString(count)); 
    } 
} 

只需複製並粘貼以上,這會工作得很好。

+0

非常感謝!現在運行良好。 – 2011-12-29 01:07:04

+0

乾杯!順便說一下,歡迎來到Stack Overflow。我應該告訴你,如果他們有用,你應該把答案標記爲接受。請記住在未來:) – 2011-12-29 01:26:31

+0

感謝您的歡迎。 我忘記了將答案標記爲已接受... – 2011-12-29 02:26:52

1

你應該把這個線

textView1 = (TextView) this.findViewById(R.id.textView1);

setContentView(R.layout.main); 

,你只需要聲明的TextView在開始時

TextView textView1; 

不要嘗試使用findViewById(R.id.textView1);而declaraing實例變量因爲觀點並不如此在那個時間點。

0

這是你的代碼應該如何看起來像:

TextView textView1 = null; 
    int count = 0; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    TextView textView1 = (TextView) findViewById(R.id.textView1); 
    } 

    public void Count(){ 
     count ++; 
     textView1.setText(Integer.toString(count)); 
    }