简体   繁体   English

Android Studio运行时错误(按钮)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM