2015-05-13 3 views
0

Для начала я довольно новичок в программировании на Android, поэтому эта ошибка может быть очень простой, я не заметил. Но всякий раз, когда я открываю простое приложение, я начинаю с изображения. Когда я сажусь, это должно измениться на другое изображение, но вместо этого приложение выйдет из строя. Есть идеи, почему это так?Android setImageResource вызывает приложение для краха

вот мой код Java

package example.course.bananapeeler; 
import android.gesture.Gesture; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.MenuItem; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.ImageView; 
import android.view.MotionEvent; 
import android.view.GestureDetector; 
import android.support.v4.view.GestureDetectorCompat; 

public class MainActivity extends ActionBarActivity implements GestureDetector.OnGestureListener, 
     GestureDetector.OnDoubleTapListener{ 

    private ImageView mainPic; 
    private GestureDetectorCompat gestureDetector; 
    private int moneyPerSecond; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     this.gestureDetector = new GestureDetectorCompat(this, this); 
     gestureDetector.setOnDoubleTapListener(this); 

     //ImageView mainPic = (ImageView)findViewById(R.id.mainPic); 
     ImageView mainPic = (ImageView)findViewById(R.id.mainPic); 
     } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent motionEvent) { 

     return false; 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent motionEvent) { 

     return false; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent motionEvent) { 

     return false; 
    } 

    @Override 
    public boolean onDown(MotionEvent motionEvent) { 
     return true; 
    } 

    @Override 
    public void onShowPress(MotionEvent motionEvent) { 


    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent motionEvent) { 

     return false; 
    } 

    @Override 
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent2, float v, float v2) { 

     return false; 
    } 

    @Override 
    public void onLongPress(MotionEvent motionEvent) { 

    } 

    @Override 
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent2, float v, float v2) { 
     /* 
     ImageView img = new ImageView(this); 
     findViewById(R.id.mainPic); 
     */ 
     mainPic.setImageResource(R.drawable.peeledbanana); 

     return true; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     this.gestureDetector.onTouchEvent(event); 
     return super.onTouchEvent(event); 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

XML-файл:

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"><![CDATA[ 


/"peeledbanana"; 
    android:id="@+id/imageView" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" /> 
]]> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/mainPic" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:src="@drawable/mainbanana" 
    android:contentDescription="@string/mainPic" /> 
</RelativeLayout> 

Не знаю, почему формат файла синтаксиса странно. Это вызывает аварии?

LogCat Ошибки

05-13 17: 16: 47,329 2333-2333/example.course.bananapeeler E/InputEventReceiver: Исключение диспетчеризации события ввода. 05-13 17: 16: 47,329 2333-2333/example.course.bananapeeler Е/MessageQueue-JNI: Исключение в MessageQueue обратного вызова: handleReceiveCallback 05-13 17: 16: 47,339
2333-2333/example.course. bananapeeler Е/MessageQueue-JNI: java.lang.NullPointerException: Попытка вызвать виртуальный метод 'пустот android.widget.ImageView.setImageResource (INT)' на нулевой объект эталонной в example.course.bananapeeler.MainActivity.onFling (MainActivity.java:88) на android.view.GestureDetector.onTouchEvent (GestureDetector.java:620) на android.support.v4.view.GestureDetectorCompat $ GestureDetectorCompatImplJellybeanMr2.onTouchEvent (GestureDetectorCompat.java:475) в android.support.v4.view.GestureDetectorCompat.onTouchEvent (GestureDetectorCompat.java:538) в example.course.bananapeeler.MainActivity.onTouchEvent (MainActivity.java:102) на android.app.Activity.dispatchTouchEvent (активность. java: 2869) at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:59) at com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent (PhoneWindow.java:2529) в android.view.View.dispatchPointerEvent (View.java:9180) в android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:4734) в android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess (ViewRootImpl.java: 4572) на droid.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:4096) at android.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java:4149) at android.view.ViewRootImpl $ InputStage.forward (ViewRootImpl.java: 4115) в android.view.ViewRootImpl $ AsyncInputStage.forward (ViewRootImpl.java:4229) в android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:4123) в android.view.ViewRootImpl $ AsyncInputStage.apply (ViewRootImpl.java:4286) в android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:4096) в android.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java:4149) в android.view.ViewRootImpl $ InputStage.forward (ViewRootImpl.java:4115) на android.view.View RootImpl $ InputStage.apply (ViewRootImpl.java:4123) в android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:4096) в android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:6600) на андроиде. view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:6484) на android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:6455) в android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:6690) в android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:185) в android.os. MessageQueue.nativePollOnce (родной метод) на android.os.MessageQueue.next (MessageQueue.java:143) на android.os.Looper.loop (Looper.java:130) на android.app.ActivityThread.main (ActivityThread .java: 5972) at java.lang.reflect.Method.invoke (родной метод) по адресу java.lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1388) at com.android.inte rnal.os.ZygoteInit.main (ZygoteInit.java:1183) 05-13 17: 16: 47.339 2333-2333/example.course.bananapeeler D/AndroidRuntime: выключение VM 05-13 17: 16: 47.339
2333-2333/example.course.bananapeeler E/AndroidRuntime: FATAL ИСКЛЮЧЕНИЕ: main Процесс: example.course.bananapeeler, PID: 2333 java.lang.NullPointerException: попытка вызвать виртуальный метод void android.widget.ImageView. setImageResource (интермедиат)»на нулевой объект эталонным в example.course.bananapeeler.MainActivity.onFling (MainActivity.java:88) в android.view.GestureDetector.onTouchEvent (GestureDetector.java:620) в android.support .v4.view.GestureDetectorCompat $ GestureDetect orCompatImplJellybeanMr2.onTouchEvent (GestureDetectorCompat.java:475) на android.support.v4.view.GestureDetectorCompat.onTouchEvent (GestureDetectorCompat.java:538) на example.course.bananapeeler.MainActivity.onTouchEvent (MainActivity.java:102) на android.app.Activity.dispatchTouchEvent (Activity.java:2869) at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:59) at com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent (PhoneWindow.java:2529) на android.view.View.dispatchPointerEvent (View.java:9180) в android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:4734) в android.view. ViewRootImpl $ ViewPostImeInputStage.o nProcess (ViewRootImpl.java:4572) в android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:4096) в android.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java:4149) в android.view. ViewRootImpl $ InputStage.forward (ViewRootImpl.java:4115) в android.view.ViewRootImpl $ AsyncInputStage.forward (ViewRootImpl.java:4229) в android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:4123) в android.view.ViewRootImpl $ AsyncInputStage.apply (ViewRootImpl.java:4286) at android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:4096) at android.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java: 4149) на android.view.ViewRootImpl $ InputStage.forward (ViewRo otImpl.java:4115) на android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:4123) на android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:4096) на android.view.ViewRootImpl. deliverInputEvent (ViewRootImpl.java:6600) на android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:6484) на android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:6455) в android.view.ViewRootImpl $ WindowInputEventReceiver. onInputEvent (ViewRootImpl.java:6690) на android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:185) на android.os.MessageQueue.nativePollOnce (нативный метод) на android.os.MessageQueue.next (MessageQueue.java: 143) на android.os.Looper.loop (Looper.java:130) на android.app.ActivityThread.main (ActivityThread.java:5972) на java.lang.reflect.Method.invoke (собственный метод) at java.lang.reflect.Method.invoke (Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1388) at com.android.internal.os .ZygoteInit.main (ZygoteInit.java:1183)

+1

Что ошибка у вас есть? Пожалуйста, разместите свое сообщение logcat. – AndroidEx

+0

Я добавил logcat, но я не уверен, как дать ему правильный формат. Извините, но я надеюсь, что это предоставит больше информации о моей ошибке. –

ответ

2

Вы инициализируете mainPic локально вместо переменной класса.

Изменить

ImageView mainPic = (ImageView)findViewById(R.id.mainPic); 

в

mainPic = (ImageView)findViewById(R.id.mainPic); 
+1

Я мог бы поклясться, что я пробовал это раньше, и это не сработало, но теперь это сделало так спасибо за помощь! –

Смежные вопросы