我的第一个应用无效,可以帮助我吗?

时间:2017-02-18 13:25:33

标签: android nullpointerexception

package com.francesco.provadinuovo;

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

public class MainActivity extends AppCompatActivity {

    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
       button =(Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                System.out.println("Welcome!");

            }
        });
    }
}

问题是: 02/18 14:32:30:启动MainActivity $ adb push C:\ Users \ start \ AndroidStudioProjects \ Provadinuovo \ app \ build \ outputs \ apk \ app-debug.apk /data/local/tmp/com.francesco.provadinuovo $ adb shell pm install -r“/data/local/tmp/com.francesco.provadinuovo” 成功

$ adb shell am start -n“com.francesco.provadinuovo / com.francesco.provadinuovo.MainActivity”-a android.intent.action.MAIN -c android.intent.category.LAUNCHER 客户尚未准备好......等待流程上线 连接到设备模拟器-5554上的过程2354 W / System:ClassLoader引用未知路径:/data/app/com.francesco.provadinuovo-1/lib/x86 W / art:在Android 4.1之前,方法android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter,android.content.res.ColorStateList,android.graphics.PorterDuff $ Mode)会有错误地覆盖了android.graphics.drawable.Drawable中的package-private方法 I / OpenGLRenderer:初始化的EGL,版本1.4 D / OpenGLRenderer:交换行为1 E / EGL_emulation:tid 2445:eglSurfaceAttrib(1146):错误0x3009(EGL_BAD_MATCH) W / OpenGLRenderer:无法在表面0x971ec920上设置EGL_SWAP_BEHAVIOR,错误= EGL_BAD_MATCH

3 个答案:

答案 0 :(得分:4)

您必须先调用setContentView,然后才能使用" findViewById"。

使用findViewById也是一个小错误,你需要在活动中调用它,而不是在按钮上调用它,然后将返回的视图转换为你想要使用的任何内容:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                System.out.println("Welcome!");

            }
        });
    }

答案 1 :(得分:2)

您需要交换2行。

findViewById(R.id.button);
setContentView(R.layout.activity_main);

setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button)

并在onCreate

中指定按钮成员变量
button = (Button) findViewById(R.id.button);

使用XML的替代解决方案。您可以在活动中明确调用方法,并使其充当按钮点击的回调,例如android:onClick="doAction"。在您的活动中,只需添加该方法。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void doAction(View v){
  System.out.println("Welcome!");
}

答案 2 :(得分:0)

(编辑:添加演员)

我认为

button.findViewById(R.id.button);
setContentView(R.layout.activity_main);

应替换为:

setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);

第一行构建布局,第二行将按钮小部件的引用存储到button,否则将null