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
答案 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
。