2011-12-28 60 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)); 
    }