Android应用程序在AVD中不断崩溃,但在Gradle中正确构建

我用两个按钮和一个textview制作了这个小型Android应用程序,非常基本。 但它不是从模拟器开始的。 没有任何构建错误。

这是activity_main.xml文件

  

这是MainActivity.java文件

 package com.example.android.testapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { final TextView mShowCounter = (TextView) findViewById(R.id.text_view_counter); final Button button = (Button) findViewById(R.id.toast_button); private int mCount = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void showToast(View view) { Toast toast = Toast.makeText(this, R.string.toast_popup,Toast.LENGTH_LONG); toast.show(); } public void counterUp(View view) { mCount++; if(mShowCounter != null) { mShowCounter.setText(Integer.toString(mCount)); } } } 

我尝试过制作多个项目,但这不起作用。 在第一个项目中,它在第一个构建之后开始显示错误,说“无法解析符号R”,突出显示R为红色的所有实例。 但是,在这个版本中,应用程序在模拟器中甚至没有启动过任何错误。

您正在尝试访问**xml**实例,然后才能创建导致应用程序崩溃的实例。

要检查应用程序崩溃导致的原因,您可以参考Logcat进入IDE。

将您的实例化代码放在onCreate()回调中: –

 package com.example.android.testapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { final TextView mShowCounter; final Button button; private int mCount = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mShowCounter = (TextView) findViewById(R.id.text_view_counter); button = (Button) findViewById(R.id.toast_button); } public void showToast(View view) { Toast toast = Toast.makeText(this, R.string.toast_popup,Toast.LENGTH_LONG); toast.show(); } public void counterUp(View view) { mCount++; if(mShowCounter != null) { mShowCounter.setText(Integer.toString(mCount)); } } } 

Android应用程序在AVD中不断崩溃,但在Gradle中正确构建

因为你在onCreate()之外做findViewById而不做setContentView()

setContentView()之后在onCreate()方法中找到findViewById

声明你的TextView mShowCounterButton button; 作为全球

示例代码

 public class MainActivity extends AppCompatActivity { TextView mShowCounter ; Button button ; private int mCount = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mShowCounter = (TextView) findViewById(R.id.text_view_counter); button = (Button) findViewById(R.id.toast_button); } public void showToast(View view) { Toast toast = Toast.makeText(this, R.string.toast_popup,Toast.LENGTH_LONG); toast.show(); } public void counterUp(View view) { mCount++; if(mShowCounter != null) { mShowCounter.setText(Integer.toString(mCount)); } } } 

问题在于这些方面。

 final TextView mShowCounter = (TextView) findViewById(R.id.text_view_counter); final Button button = (Button) findViewById(R.id.toast_button); 

您的应用程序崩溃,因为在类初始化阶段,视图尚不存在。 findViewById不起作用。

你应该在onCreate移动这些行。

你的组件初始化应该放在onCreate()即把你的

 mShowCounter = (TextView) findViewById(R.id.text_view_counter); button = (Button) findViewById(R.id.toast_button); 

onCreate()