Java Android setImageResource导致应用程序崩溃
首先,我对android编程相当陌生,所以这个错误可能非常简单,我没有注意到。但每当我在电脑上打开这个简单的应用程序时,它都会以一个图像开始。当我刷卡时,它应该换成不同的图像,但应用程序却崩溃了。你知道为什么吗 这是我的java代码Java Android setImageResource导致应用程序崩溃,java,android,android-studio,android-imageview,Java,Android,Android Studio,Android Imageview,首先,我对android编程相当陌生,所以这个错误可能非常简单,我没有注意到。但每当我在电脑上打开这个简单的应用程序时,它都会以一个图像开始。当我刷卡时,它应该换成不同的图像,但应用程序却崩溃了。你知道为什么吗 这是我的java代码 package example.course.bananapeeler; import android.gesture.Gesture; import android.support.v7.app.ActionBarActivity; import android.
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
E/MessageQueue-JNI﹕ MessageQueue回调中出现异常:
HandlerReceiveCallback 05-13 17:16:47.3392333-2333/example.course.bananapeeler E/MessageQueue JNI﹕ java.lang.NullPointerException:尝试调用虚拟方法“void” 空对象上的android.widget.ImageView.setImageResource(int)“” 参考 例如.course.bananapeeler.MainActivity.onFling(MainActivity.java:88) 在android.view.GestureDetector.onTouchEvent(GestureDetector.java:620)上 位于android.support.v4.view.GestureDetectorCompat$gesturedetectorcompatimplegyllybeanmr2.onTouchEvent(GestureDetectorCompat.java:475) 位于android.support.v4.view.GestureDetectorCompat.onTouchEvent(GestureDetectorCompat.java:538) 例如.course.bananapeeler.MainActivity.onTouchEvent(MainActivity.java:102) 位于android.app.Activity.dispatchTouchEvent(Activity.java:2869) 位于android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:59) 位于com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2529) 位于android.view.view.dispatchPointerEvent(view.java:9180) 位于android.view.ViewRootImpl$viewPostimeiInputStage.processPointerEvent(ViewRootImpl.java:4734) 在android.view.ViewRootImpl$viewPostimeiInputStage.onProcess中(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) 在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$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(本机方法) 下一步(MessageQueue.java:143) 位于android.os.Looper.loop(Looper.java:130) 位于android.app.ActivityThread.main(ActivityThread.java:5972) 位于java.lang.reflect.Method.invoke(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1388) 位于com.android.internal.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﹕ 致命的 例外情况:主要 流程:example.course.bananapeeler,PID:2333 java.lang.NullPointerException:尝试在空对象上调用虚拟方法“void android.widget.ImageView.setImageResource(int)” 参考 例如.course.bananapeeler.MainActivity.onFling(MainActivity.java:88) 在android.view.GestureDetector.onTouchEvent(GestureDetector.java:620)上 位于android.support.v4.view.GestureDetectorCompat$gesturedetectorcompatimplegyllybeanmr2.onTouchEvent(GestureDetectorCompat.java:475) 位于android.support.v4.view.GestureDetectorCompat.onTouchEvent(GestureDetectorCompat.java:538) 例如.course.bananapeeler.MainActivity.onTouchEvent(MainActivity.java:102) 位于android.app.Activity.dispatchTouchEvent(Activity.java:2869) 位于android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:59) 位于com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2529) 位于android.view.view.dispatchPointerEvent(view.java:9180) 位于android.view.ViewRootImpl$viewPostimeiInputStage.processPointerEvent(ViewRootImpl.java:4734) 在android.view.ViewRootImpl$viewPostimeiInputStage.onProcess中(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.V
ImageView mainPic = (ImageView)findViewById(R.id.mainPic);
mainPic = (ImageView)findViewById(R.id.mainPic);