[英]Runtime Error with Android Studio (Button)
I would be so, so grateful if you can help me with this problem. 如果您能帮助我解决这个问题,我将非常感激。
I am learning android development with Android Basics on Udacity. 我正在使用Udacity上的Android Basics学习android开发。 I am at User Input: Lesson 8. The apps have been downloading to my phone fine so far but now the app (JustJava) crashes when I press the only button in it.
我在用户输入中:第8课。到目前为止,应用程序可以很好地下载到我的手机上,但是现在当我按其中的唯一按钮时,该应用程序(JustJava)崩溃了。 There are no serious (red) errors showing on Android Studio.
Android Studio上没有显示严重(红色)错误。
I have reviewed logcat but cannot understand it except that the button (onClick) is the problem. 我已经查看了logcat,但除了按钮(onClick)是问题之外,无法理解它。 I have no idea how to fix it.
我不知道如何解决它。
This keeps appearing in red in logcat every few seconds: E/TZ_CCM_SERVER: Only 'CCM' are supported 这会每隔几秒钟在logcat中始终显示为红色:E / TZ_CCM_SERVER:仅支持“ CCM”
Here is the full error log relating my runtime crash: 这是有关我的运行时崩溃的完整错误日志:
07-09 10:51:17.638 18253-18253/com.example.android.justjava E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.android.justjava, PID: 18253 java.lang.IllegalStateException: Could not execute method for android:onClick at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389) at android.view.View.performClick(View.java:5697) at android.widget.TextView.performClick(TextView.java:10826) at android.view.View$PerformClick.run(View.java:22526) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Metho
07-09 10:51:17.638 18253-18253 / com.example.android.justjava E / AndroidRuntime:致命例外:主进程: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)在com.android的java.lang.reflect.Method.invoke(本机方法) .internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)原因:java.lang上的java.lang.reflect.InvocationTargetException .reflect.Metho d.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) at android.view.View.performClick(View.java:5697) at android.widget.TextView.performClick(TextView.java:10826) at android.view.View$PerformClick.run(View.java:22526) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.example.android.justjava.MainActivity.displayPrice(MainActivity.java:45) at com.example.android.justja
d.invoke(本机方法),位于android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384),位于android.view.View.performClick(View.java:5697),位于android.widget.TextView。 android.os.Handler.dispatchMessage(Handler)上的performClick(TextView.java:10826)android.view.View $ PerformClick.run(View.java:22526)android.os.Handler.handleCallback(Handler.java:739) .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)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)原因:java.lang.NullPointerException:尝试执行在com.example.android上com.example.android.justjava.MainActivity.displayPrice(MainActivity.java:45)上的空对象引用上调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)' .justja va.MainActivity.submitOrder(MainActivity.java:28) at java.lang.reflect.Method.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) at android.view.View.performClick(View.java:5697) at android.widget.TextView.performClick(TextView.java:10826) at android.view.View$PerformClick.run(View.java:22526) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
android上的java.lang.reflect.Method.invoke(本机方法)上的va.MainActivity.submitOrder(MainActivity.java:28)在android上的android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384)。 android.widget.TextView.performClick(TextView.java:10826)的android.view.View.PerformClick.run(View.java:22526)的view.View.performClick(View.java:5697) .handleCallback(Handler.java:739)位于android.os.Handler.dispatchMessage(Handler.java:95)位于android.os.Looper.loop(Looper.java:158)位于android.app.ActivityThread.main(ActivityThread。 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)处的java.lang.reflect.Method.invoke(本机方法)处的java.72。主要(ZygoteInit.java:1120)
EDIT: MainActivity / java code: 编辑:MainActivity / Java代码:
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 Code: 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>
I have just Called TextView
in global, then initialized in onCreate
and then using wherever we need. 我刚刚在全局中调用了
TextView
,然后在onCreate
进行了初始化,然后在需要的地方使用它。
Just replace this edited java class, 只需替换此已编辑的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));
}
}
Check your activity_main.xml in this layout you does not have a TextView with that id price_text_view. 在此布局中检查您的activity_main.xml,您没有一个ID为price_text_view的TextView。 Just define a TextView with that id and your App will not crash anymore and you can go Forward to the next chapter ;)
只需使用该ID定义一个TextView,您的应用就不会崩溃,您可以继续下一章;)
<TextView
android:id="@+id/price_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
I think you just made a silly misstake. 我认为您只是犯了一个愚蠢的错误。 I saw you're using layout insteed of id ^^
我看到您使用的是ID ^^的布局指示
Change your xml like below 如下更改您的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"
/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.