2013-04-16 3 views
-1

Я начинаю разрабатывать приложения для Android! Я начинаю свой первый и сталкивается с ранней проблемой. У приложения есть две кнопки, на которые вы можете щелкнуть, чтобы добавить или вычесть основную переменную. Все шло хорошо, пока я не протестировал его на своем Nexus 4, и он закроется, когда я нажму кнопку. Я посмотрел на похожие вопросы и до сих пор не могу понять свою проблему. Благодаря!Force Close on button click

Logcat:

04-16 10:42:48.528: D/libEGL(17421): loaded /system/lib/egl/libEGL_adreno200.so 
    04-16 10:42:48.538: D/libEGL(17421): loaded /system/lib/egl/libGLESv1_CM_adreno200.so 
    04-16 10:42:48.538: D/libEGL(17421): loaded /system/lib/egl/libGLESv2_adreno200.so 
    04-16 10:42:48.538: I/Adreno200-EGL(17421): <eglInitialize:269>: EGL 1.4 QUALCOMM build: Nondeterministic AU_full_mako_PARTNER-ANDROID/JB-MR1-DEV_CL2961380_release_AU (CL2961380) 
    04-16 10:42:48.538: I/Adreno200-EGL(17421): Build Date: 12/10/12 Mon 
    04-16 10:42:48.538: I/Adreno200-EGL(17421): Local Branch: 
    04-16 10:42:48.538: I/Adreno200-EGL(17421): Remote Branch: m/partner-android/jb-mr1-dev 
    04-16 10:42:48.538: I/Adreno200-EGL(17421): Local Patches: NONE 
    04-16 10:42:48.538: I/Adreno200-EGL(17421): Reconstruct Branch: NOTHING 
    04-16 10:42:48.568: D/OpenGLRenderer(17421): Enabling debug mode 0 
    04-16 10:42:52.592: D/AndroidRuntime(17421): Shutting down VM 
    04-16 10:42:52.592: W/dalvikvm(17421): threadid=1: thread exiting with uncaught exception (group=0x40bef930) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): FATAL EXCEPTION: main 
    04-16 10:42:52.592: E/AndroidRuntime(17421): java.lang.NullPointerException 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at com.frostbytedev.addsub.StartingPoint$2.onClick(StartingPoint.java:37) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at android.view.View.performClick(View.java:4204) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at android.view.View$PerformClick.run(View.java:17355) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at android.os.Handler.handleCallback(Handler.java:725) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at android.os.Handler.dispatchMessage(Handler.java:92) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at android.os.Looper.loop(Looper.java:137) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at android.app.ActivityThread.main(ActivityThread.java:5041) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at java.lang.reflect.Method.invokeNative(Native Method) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at java.lang.reflect.Method.invoke(Method.java:511) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    04-16 10:42:52.592: E/AndroidRuntime(17421): at dalvik.system.NativeStart.main(Native Method) 
    04-16 10:43:22.033: D/AndroidRuntime(17514): Shutting down VM 
    04-16 10:43:22.033: W/dalvikvm(17514): threadid=1: thread exiting with uncaught exception (group=0x40bef930) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): FATAL EXCEPTION: main 
    04-16 10:43:22.033: E/AndroidRuntime(17514): java.lang.NullPointerException 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at com.frostbytedev.addsub.StartingPoint$2.onClick(StartingPoint.java:37) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at android.view.View.performClick(View.java:4204) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at android.view.View$PerformClick.run(View.java:17355) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at android.os.Handler.handleCallback(Handler.java:725) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at android.os.Handler.dispatchMessage(Handler.java:92) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at android.os.Looper.loop(Looper.java:137) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at android.app.ActivityThread.main(ActivityThread.java:5041) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at java.lang.reflect.Method.invokeNative(Native Method) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at java.lang.reflect.Method.invoke(Method.java:511) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    04-16 10:43:22.033: E/AndroidRuntime(17514): at dalvik.system.NativeStart.main(Native Method) 
    04-16 10:43:23.685: I/Process(17514): Sending signal. PID: 17514 SIG: 9 

У меня также есть активность и файл класса.

активность:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="top" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".StartingPoint" > 
<TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Your total is 0" 
     android:textSize="45dp" 
     android:gravity="center" 
     android:id="@+id/tvDisplay" 
     /> 
<Button 
     android:layout_width="250dp" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="Add One" 
     android:textSize="20dp" 
     android:id="@+id/bAdd" /> 
<Button 
     android:layout_width="250dp" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="Subtract One" 
     android:textSize="20dp" 
     android:id="@+id/bSub" /> 

</LinearLayout> 

Наконец, мой файл Класс:

package com.frostbytedev.addsub; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class StartingPoint extends Activity { 

    int counter; 
    Button add, sub; 
    TextView display; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_starting_point); 
     counter = 0; 
     add=(Button) findViewById(R.id.bAdd); 
     sub=(Button) findViewById(R.id.bSub); 
     add.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       counter++; 
       display.setText("Your total is "+counter); 
      } 
     }); 

     sub.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       counter--; 
       display.setText("Your total is "+counter); 
      } 
    }); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.starting_point, menu); 
     return true; 
    } 

} 

ответ

1

вы не инициализирован отображения Можно TextView

сделать

diplay = (TextView) findVidewById(R.id.tvDisplay); 
1

Вам нужно назначить вид (tvDisplay) для display. В настоящее время display объявляется, но не назначается, и поэтому null.

3

Вам нужно найти идентификатор TextView.

android:id="@+id/tvDisplay" 
display = TextView findViewById(R.id.tvDisplay); 

У вас нет инструкции, как указано выше в вашем коде, что является причиной исключения NullPointerException.

После того, как вы нашли идентификатор, как указано выше заданного текста в TextView

display.setText("Your total is "+counter); 

Объяснение:

Каждый ресурс, как строки, и видом вводимого коэффициента, как кнопка TextView будет иметь запись в R.java файл, как показано ниже

public static final int tvDisplay=0x7f080000;// value may differ 

Значение is. Таким образом, R.id.textview будет целочисленным. Вам нужно инициализировать textview, найдя идентификатор, а затем установите текст в TextView.

+0

Спасибо так много! В конце концов, это была глупая ошибка, но у меня defenitlry что-то оттолкнуло от этой ошибки. – Stevenator21

3

Более подробное объяснение ошибки, поэтому вы не откроете еще один такой вопрос в какое-то время.

Прочитайте ошибку:

java.lang.NullPointerException 
04-16 10:42:52.592: E/AndroidRuntime(17421): at com.frostbytedev.addsub.StartingPoint$2.onClick(StartingPoint.java:37) 

В принципе есть что-то null на этой линии (37).

Перейти к этой линии и внешний вид:

display.setText("Your total is "+counter); 

Вы звоните setText(String text) на display. Так что проблема есть.

Если вы посмотрите, не установили ли вы display (что равно null), и поэтому вы вызываете метод ни на что.Как и другие отметили, просто получить вид с findViewById, приводите его к TextView и сохранить его на переменную дисплея:

display = (TextView) findViewById(R.id.textview); 

и узнать, как отлаживать, это ключ!

+1

+1 для изучения ** отладки ** – Simon

1

добавить

display=(TextView) findViewById(R.id.your id);