【问题标题】:android app crashes when debugging with my device使用我的设备进行调试时,android 应用程序崩溃
【发布时间】:2017-02-25 02:12:04
【问题描述】:

大家好,我有一个奇怪的问题 我是 android 应用程序开发的新手 我将我的设备(三星 A5)连接到 Android Studio 以使用它而不是使用模拟器。 当我运行应用程序时

package com.example.bob.myfirstapp;

import android.app.Activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button b = (Button)findViewById(R.id.button);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setContentView(R.layout.contact);

            }
        });
    }
}

完美运行 但是当我添加这个: Button bc = (Button)findViewById(R.id.button); 在 mainActivity 类中,当我运行它时它会崩溃。

package com.example.bob.myfirstapp;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
/***********************************************/
Button bc = (Button)findViewById(R.id.button);
/**********************************************/
@Override
protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Button b = (Button)findViewById(R.id.button);
       b.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               setContentView(R.layout.contact);
           }
       });
    }
}

请向我解释问题出在哪里以及我应该怎么做才能解决它 提前非常感谢你

【问题讨论】:

    标签: android


    【解决方案1】:

    首先你需要了解java属性是如何initialized的。

    接下来您需要了解findViewById 的工作原理。它查找从DecorView aka root view 开始的视图,该视图通过调用setContentView 进行初始化。

    现在你会发现

    Button bc = (Button)findViewById(R.id.button);
    

    实际上是在调用setContentView 之前执行的。这会给你带来麻烦。

    【讨论】:

    • 非常感谢您的回答非常有价值,让我明白我的错误在哪里:)
    • @N.Belhadj 很高兴为您提供帮助
    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 2023-02-14
    • 2018-01-10
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多