【问题标题】:App force closes on button click应用程序强制在按钮单击时关闭
【发布时间】:2012-01-09 23:10:52
【问题描述】:

我有一个Activity 和一个Button,其中IntentActivity 的启动方式相关。前一个Activity 是一个ListView,它额外传递给这个Activity 以定义Button 的不同值单击Intents。请看下面我的代码;

public class ContentViewer extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle = this.getIntent().getExtras();
    int chooser = bundle.getInt("Layout");

    switch(chooser) {
    case 0:
        setContentView(R.layout.about);
        break;

    case 1:
        setContentView(R.layout.contact);
        break;

    case 2:
        setContentView(R.layout.contentviewer);
        break;

    case 3:
        setContentView(R.layout.contact);
        break;

    case 4:
        setContentView(R.layout.contact);
        break;

    case 5:
        setContentView(R.layout.contact);
        break;

    case 6:
        setContentView(R.layout.contact);
        break;

    case 7:
        setContentView(R.layout.contact);
        break;

    case 8:
        setContentView(R.layout.contact);
        break;

    case 9:
        setContentView(R.layout.contact);
        break;
    }

    final int linker = bundle.getInt("Layout");
    Button vlink = (Button)findViewById(R.id.videolink);
    vlink.setOnClickListener(new View.OnClickListener() {
        @Override
            public void onClick(View view) {
               switch(linker) {  
            case 0:
                Intent v0 = new Intent(Intent.ACTION_VIEW,
                        Uri.parse("vnd.youtube://" + "0lh_UWF9ZP4"));
                        startActivity(v0); 
                break;
            case 1:
                Intent v1 = new Intent(Intent.ACTION_VIEW,
                        Uri.parse("vnd.youtube://" + "0lh_UWF9ZP4"));
                        startActivity(v1); 
                break;
            case 2:
                Intent v2 = new Intent(Intent.ACTION_VIEW,
                        Uri.parse("vnd.youtube://" + "0lh_UWF9ZP4"));
                        startActivity(v2); 
                break;
            }
        }
    });
}
}

每当我单击按钮时,应用程序强制关闭。我不知道我的错误可能在哪里。这是错误日志;

01-10 00:03:40.895: W/dalvikvm(5759): threadid=1: thread exiting with uncaught exception (group=0x40c271f8)
01-10 00:03:40.900: E/AndroidRuntime(5759): FATAL EXCEPTION: main
01-10 00:03:40.900: E/AndroidRuntime(5759): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.borislemke.cookingwithdog/com.borislemke.cookingwithdog.ContentViewer}: java.lang.NullPointerException
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.os.Looper.loop(Looper.java:137)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.app.ActivityThread.main(ActivityThread.java:4507)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at java.lang.reflect.Method.invokeNative(Native Method)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at java.lang.reflect.Method.invoke(Method.java:511)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at dalvik.system.NativeStart.main(Native Method)
01-10 00:03:40.900: E/AndroidRuntime(5759): Caused by: java.lang.NullPointerException
01-10 00:03:40.900: E/AndroidRuntime(5759):     at com.borislemke.cookingwithdog.ContentViewer.onCreate(ContentViewer.java:61)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.app.Activity.performCreate(Activity.java:4465)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
01-10 00:03:40.900: E/AndroidRuntime(5759):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
01-10 00:03:40.900: E/AndroidRuntime(5759):     ... 11 more

【问题讨论】:

  • 如果有人能解释一下情况会很好! :)
  • 第 61 行中的内容是 null 并且不应该是。哪一个是第 61 行?
  • ContentViewer.java 第 61 行有什么内容?
  • @alextsc vlink.setOnClickListener(new View.OnClickListener() {

标签: android android-activity forceclose


【解决方案1】:

vlink 为空。这可能是因为它不是在您正在加载的任何布局中导致崩溃。

【讨论】:

  • 但是屏幕上没有错误,我应该怎么知道要修复什么? :s
  • 因为它在您的堆栈跟踪中。看看你的布局。无论您打开哪个导致此崩溃,我都相当确定没有 ID 为 videolink 的按钮。
  • 谢谢,这似乎是一个错字。布局都是正确的。按钮 id 漏了一个字母!
【解决方案2】:

您的 XML 布局中是否有一个 ID 为“videolink”的按钮?您的 vLink 按钮为空,因为它找不到要映射到的 UI 元素。可以贴一下布局xml吗?

我不熟悉您使用选择器所做的事情 - 您是否不想从头开始加载包含按钮的布局?

【讨论】:

  • 这里似乎是一个错字!呵呵,好尴尬。。好吧,找到问题了。它适用于第 2 项和第 3 项,但在第 1 种情况下膨胀的布局中,按钮 id 输入错误
  • 感谢您的回答!从现在开始我会更加认真地工作。真的很抱歉!
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
相关资源
最近更新 更多