Java Android Studio运行时错误(按钮)
如果你能帮我解决这个问题,我将非常非常感激 我正在用Udacity上的android基础知识学习android开发。 我正在进行用户输入:第8课。 到目前为止,这些应用程序一直下载到我的手机上,但现在当我按下其中唯一的按钮时,应用程序(JustJava)崩溃了。Android Studio上没有显示严重(红色)错误 我已经查看了logcat,但除了按钮(onClick)是问题所在之外,我无法理解它。我不知道如何修理它 这在logcat中每隔几秒钟就会显示为红色:E/TZ_CCM_服务器:仅支持“CCM” 以下是与我的运行时崩溃相关的完整错误日志: 07-09 10:51:17.638 18253-18253/com.example.android.justjava E/AndroidRuntime:FATAL EXCEPTION:main 进程:com.example.android.justjava,PID:18253 java.lang.IllegalStateException:无法为android执行方法:onClick 在android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389) 在android.view.view.performClick上(view.java:5697) 在android.widget.TextView.performClick上(TextView.java:10826) 在android.view.view$PerformClick.run(view.java:22526) 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:158) 位于android.app.ActivityThread.main(ActivityThread.java:7224) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 原因:java.lang.reflect.InvocationTargetException 位于java.lang.reflect.Method.invoke(本机方法) 在android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) 在android.view.view.performClick上(view.java:5697) 在android.widget.TextView.performClick上(TextView.java:10826) 在android.view.view$PerformClick.run(view.java:22526) 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:158) 位于android.app.ActivityThread.main(ActivityThread.java:7224) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)” 位于com.example.android.justjava.MainActivity.displayPrice(MainActivity.java:45) 位于com.example.android.justjava.MainActivity.submitor(MainActivity.java:28) 位于java.lang.reflect.Method.invoke(本机方法) 在android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) 在android.view.view.performClick上(view.java:5697) 在android.widget.TextView.performClick上(TextView.java:10826) 在android.view.view$PerformClick.run(view.java:22526) 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:158) 位于android.app.ActivityThread.main(ActivityThread.java:7224) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 编辑: MainActivity/java代码:Java Android Studio运行时错误(按钮),java,android,onclick,Java,Android,Onclick,如果你能帮我解决这个问题,我将非常非常感激 我正在用Udacity上的android基础知识学习android开发。 我正在进行用户输入:第8课。 到目前为止,这些应用程序一直下载到我的手机上,但现在当我按下其中唯一的按钮时,应用程序(JustJava)崩溃了。Android Studio上没有显示严重(红色)错误 我已经查看了logcat,但除了按钮(onClick)是问题所在之外,我无法理解它。我不知道如何修理它 这在logcat中每隔几秒钟就会显示为红色:E/TZ_CCM_服务器:仅支持“
package com.example.android.justjava;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.text.NumberFormat;
/**
* This app displays an order form to order coffee.
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* This method is called when the order button is clicked.
*/
public void submitOrder(View view) {
int coffeeNumber = 3;
display(coffeeNumber);
displayPrice(coffeeNumber * 5);
}
/**
* This method displays the given quantity value on the screen.
*/
private void display(int number) {
TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
quantityTextView.setText("" + number);
}
/**
* This method displays the given price on the screen.
*/
private void displayPrice(int number) {
TextView priceTextView = (TextView) findViewById(R.id.price_text_view);
priceTextView.setText(NumberFormat.getCurrencyInstance().format(number));
}
}
XML代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Quantity"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:textAllCaps="true"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="16sp"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:id="@+id/quantity_text_view"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Price"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:textAllCaps="true"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="€0"
android:textSize="16sp"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:layout="@+id/price_text_view"
/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Order"
android:onClick="submitOrder"
/>
</LinearLayout>
我刚刚在global中调用了
TextView
,然后在onCreate
中初始化,然后在我们需要的任何地方使用
只需替换这个已编辑的java类
public class MainActivity extends AppCompatActivity {
TextView priceTextView, quantityTextView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
priceTextView = (TextView) findViewById(R.id.price_text_view);
}
/**
* This method is called when the order button is clicked.
*/
public void submitOrder(View view) {
int coffeeNumber = 3;
display(coffeeNumber);
displayPrice(coffeeNumber * 5);
}
/**
* This method displays the given quantity value on the screen.
*/
private void display(int number) {
quantityTextView.setText("" + number);
}
/**
* This method displays the given price on the screen.
*/
private void displayPrice(int number) {
priceTextView.setText(NumberFormat.getCurrencyInstance().format(number));
}
}
检查此布局中的activity_main.xml您没有id为price_text_的TextView。只需使用该id定义一个TextView,您的应用程序就不会再崩溃,您可以进入下一章;)
我想你只是犯了个愚蠢的错误。我看到您使用的是布局而不是id^^如下更改您的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Quantity"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:textAllCaps="true"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="16sp"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:id="@+id/quantity_text_view"/>
<TextView
android:id="@+id/price_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Price"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:textAllCaps="true"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="€0"
android:textSize="16sp"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:layout="@+id/price_text_view"
/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Order"
android:onClick="submitOrder"
/>
OMG,请不要使用XMLMAINActivity.java中的onClick和activity\u main.xml代码。谢谢。我现在已经把它们都加上了。谢谢TomasHi vijikrish,这里有两个setText值。我将它们粘贴在这里(我还编辑了我的问题,以包含完整的java和XML代码):quantityTextView.setText(“+number”)和priceTextView.setText(NumberFormat.getCurrencyInstance().format(number))问题是您应该在
onCreate
方法之外声明TextView
,并在onCreate
方法中初始化。然后你可以在任何地方setText
。谢谢vijikrish,我是初学者,所以我不得不问一个愚蠢的问题,对不起!我看到上面的代码,您建议我添加到java中。我是在末尾添加它,还是先删除其他内容?如果是,我应该删除什么?谢谢非常感谢你的帮助。不幸的是,它仍然不起作用(使用上面编辑的代码建议)。我仍然在logcat中看到同样的错误。从早些时候开始,我在应用程序中又添加了两个按钮。他们都很好。我已经反复检查了第一个按钮的代码,似乎没有任何问题。我没有主意了(无论如何,非常感谢您抽出时间给我提建议。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Quantity"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:textAllCaps="true"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="16sp"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:id="@+id/quantity_text_view"/>
<TextView
android:id="@+id/price_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Price"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:textAllCaps="true"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="€0"
android:textSize="16sp"
android:fontFamily="sans-serif-light"
android:textColor="@android:color/black"
android:padding="10dp"
android:layout="@+id/price_text_view"
/>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Order"
android:onClick="submitOrder"
/>