2017-04-25 2 views
0

저는 Udacity Beginners 과정의 JustJava 앱을 사용하는 새로운 Android 개발자입니다. 내 전화를 사용하여 코드를 디버그하여 가격을 업데이트하기 위해 버튼을 클릭하면 "유감스럽게도 JustJava가 중지되었습니다."라는 오류가 발생합니다.내 앱이 고장났습니다. 안타깝게도 앱이 중지되었습니다.

의 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.justjava"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="justjava" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER"  /> 
      </intent-filter> 
     </activity> 
    </application> 

MainActivity.java

import android.icu.text.NumberFormat; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.annotation.RequiresApi; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.TextView; 

/** 
* 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) { 
     display(2); 
     displayPrice(2 * 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)); 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.example.android.justjava.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="quantity" 
     android:textAllCaps="true" 
     android:padding="16dp" /> 

    <TextView 
     android:id="@+id/quantity_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="0" 
     android:textSize="16sp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginStart="16dp" 
     android:textColor="@android:color/black"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Price" 
     android:textAllCaps="true" 
     android:padding="16dp" /> 

    <TextView 
     android:id="@+id/price_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="NGN0" 
     android:textSize="16sp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginStart="16dp" 
     android:textColor="@android:color/black"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="ORDER" 
     android:layout_margin="16dp" 
     android:onClick="submitOrder"/> 


</LinearLayout> 

로그 캣 오류 :

04-25 09:22:04.944 449-449/com.example.android.justjava E/AndroidRuntime: FATAL EXCEPTION: main                  Process: com.example.android.justjava, PID: 449 
                     java.lang.IllegalStateException: Could not execute method for android:onClick 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
                      at android.view.View.performClick(View.java:4470) 
                      at android.view.View$PerformClick.run(View.java:18773) 
                      at android.os.Handler.handleCallback(Handler.java:808) 
                      at android.os.Handler.dispatchMessage(Handler.java:103) 
                      at android.os.Looper.loop(Looper.java:193) 
                      at android.app.ActivityThread.main(ActivityThread.java:5341) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:515) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646) 
                      at dalvik.system.NativeStart.main(Native Method) 
                     Caused by: java.lang.reflect.InvocationTargetException 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:515) 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                      at android.view.View.performClick(View.java:4470)  
                      at android.view.View$PerformClick.run(View.java:18773)  
                      at android.os.Handler.handleCallback(Handler.java:808)  
                      at android.os.Handler.dispatchMessage(Handler.java:103)  
                      at android.os.Looper.loop(Looper.java:193)  
                      at android.app.ActivityThread.main(ActivityThread.java:5341)  
                      at java.lang.reflect.Method.invokeNative(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:515)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646)  
                      at dalvik.system.NativeStart.main(Native Method)  
                     Caused by: java.lang.NoClassDefFoundError: android.icu.text.NumberFormat 
                      at com.example.android.justjava.MainActivity.displayPrice(MainActivity.java:49) 
                      at com.example.android.justjava.MainActivity.submitOrder(MainActivity.java:33) 
                      at java.lang.reflect.Method.invokeNative(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:515)  
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
                      at android.view.View.performClick(View.java:4470)  
                      at android.view.View$PerformClick.run(View.java:18773)  
                      at android.os.Handler.handleCallback(Handler.java:808)  
                      at android.os.Handler.dispatchMessage(Handler.java:103)  
                      at android.os.Looper.loop(Looper.java:193)  
                      at android.app.ActivityThread.main(ActivityThread.java:5341)  
                      at java.lang.reflect.Method.invokeNative(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:515) 
+0

어디에서 이러한 메서드를 호출합니까? –

+1

Android 에뮬레이터에서 실행 해 보셨습니까? 그것은 당신의 장치가'android.icu.text.NumberFormat'이 무엇인지 알지 못하는 것 같습니다. 스택 추적에서 볼 수 있습니다 :'java.lang.NoClassDefFoundError : android.icu.text.NumberFormat'. 문서에 따르면 API 수준 24에서만 추가되었습니다. https://developer.android.com/reference/android/icu/text/NumberFormat.html – infl3x

+0

알겠습니다. 고맙습니다 @davidxxx – JEDiTech

답변

3

오류는 다소 다릅니다. 근본 원인은 스택 트레이스의 끝에 :

Caused by: java.lang.NoClassDefFoundError: android.icu.text.NumberFormat 
at com.example.android.justjava.MainActivity.displayPrice(MainActivity.java:49) 
at com.example.android.justjava.MainActivity.submitOrder(MainActivity.java:33) 

클래스 로더는 앱에서 사용중인 android.icu.text.NumberFormat 클래스 정의를 찾을 수 없습니다 수 있었다.
휴대 전화에 설치된 Android 버전이 API 24 (Android 7.0) 이후에 제공되는이 클래스와 호환되는지 확인해야합니다.

https://developer.android.com/reference/android/icu/text/NumberFormat.html

+0

와우. Android 4.4 버전 Gionee M3 휴대 전화를 사용합니다. Android 7.0으로 업그레이드 할 수 있습니까? – JEDiTech

+0

죄송합니다. 지금은 에뮬레이터로 작업 할 수 있습니다. – davidxxx

관련 문제