簡體   English   中英

Android Studio運行時錯誤(按鈕)

[英]Runtime Error with Android Studio (Button)

如果您能幫助我解決這個問題,我將非常感激。

我正在使用Udacity上的Android Basics學習android開發。 我在用戶輸入中:第8課。到目前為止,應用程序可以很好地下載到我的手機上,但是現在當我按其中的唯一按鈕時,該應用程序(JustJava)崩潰了。 Android Studio上沒有顯示嚴重(紅色)錯誤。

我已經查看了logcat,但除了按鈕(onClick)是問題之外,無法理解它。 我不知道如何解決它。

這會每隔幾秒鍾在logcat中始終顯示為紅色:E / TZ_CCM_SERVER:僅支持“ CCM”

這是有關我的運行時崩潰的完整錯誤日志:

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(本機方法),位於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 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)

編輯: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代碼:

<?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>

我剛剛在全局中調用了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_view的TextView。 只需使用該ID定義一個TextView,您的應用就不會崩潰,您可以繼續下一章;)

<TextView
    android:id="@+id/price_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

我認為您只是犯了一個愚蠢的錯誤。 我看到您使用的是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"
    />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM