java - Eclipse Android Project forces close immediately after startup? -
i coding accelerometer app android through eclipse. new programming java (this fourth app). when running app opens textview1 doesn't display before app crashes , device returns home screen. thoughts?! researched else's problems different mine (problems included: abstract class,
in xml, , others).
attached mainactivity.java, activity_main.xml, , manifest.
mainactivity.java
package com.example.accelerometer; import android.app.activity; import android.content.context; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.hardware.sensor; import android.hardware.sensorevent; import android.hardware.sensoreventlistener; import android.hardware.sensormanager; import android.os.bundle; import android.view.menu; import android.view.view; import android.widget.imageview; import android.widget.textview; public class mainactivity extends activity implements sensoreventlistener{ float [] history = new float[3]; private int mindex = 0; private int[] mimgs = new int[3]; public bitmap mbitmap; public textview mtextview; public imageview mimage; private sensormanager sensensormanager; private sensor senaccelerometer; private long lastupdate = 0; private float last_x, last_y, last_z; private static final int shake_threshold = 600; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mimgs[0] = r.drawable.left; mimgs[1] = r.drawable.right; mimgs[2] = r.drawable.up; mimgs[3] = r.drawable.down; mimage = (imageview) findviewbyid(r.id.imageview1); // mtextview = (textview) findviewbyid(r.id.textview1); mbitmap = bitmapfactory.decoderesource(getresources(), mimgs[mindex]); mimage.setimageresource(mimgs[mindex]); // easiest way show image sensensormanager = (sensormanager) getsystemservice(context.sensor_service); senaccelerometer = sensensormanager.getdefaultsensor(sensor.type_accelerometer); sensensormanager.registerlistener(this, senaccelerometer , sensormanager.sensor_delay_normal); } @override public void onsensorchanged(sensorevent event) { sensor mysensor = event.sensor; long curtime = system.currenttimemillis(); if ((curtime - lastupdate) > 100) { long difftime = (curtime - lastupdate); lastupdate = curtime; if (mysensor.gettype() == sensor.type_accelerometer) { float xchange = history[0] - event.values[0]; float ychange = history[1] - event.values[1]; float zchange = history[2] - event.values[2]; history[0] = event.values[0]; history[1] = event.values[1]; history[2] = event.values[2]; if ((math.abs(xchange) > 2) || (math.abs(ychange) > 2) || (math.abs(zchange) > 2)) { if ((xchange > ychange) && (xchange > zchange)) { if (xchange > 2){ //left // mindex++; // if (mindex == 3) { mindex = 0; } // overflow mbitmap = bitmapfactory.decoderesource(getresources(), mimgs[0]); mimage.setimagebitmap(mbitmap); mimage.setvisibility(view.visible); } else if (xchange < -2){ //right mbitmap = bitmapfactory.decoderesource(getresources(), mimgs[1]); mimage.setimagebitmap(mbitmap); mimage.setvisibility(view.visible); } } if ((ychange > xchange) && (ychange > zchange)) if (ychange > 2) { //down mbitmap = bitmapfactory.decoderesource(getresources(), mimgs[2]); mimage.setimagebitmap(mbitmap); mimage.setvisibility(view.visible); } else if (ychange < -2){ //up mbitmap = bitmapfactory.decoderesource(getresources(), mimgs[3]); mimage.setimagebitmap(mbitmap); mimage.setvisibility(view.visible); } } if ((zchange > xchange) && (zchange > ychange)) { if (zchange > 2){ //out mbitmap = bitmapfactory.decoderesource(getresources(), mimgs[0]); mimage.setimagebitmap(mbitmap); mimage.setvisibility(view.visible); } else if (zchange < -2){ //in mbitmap = bitmapfactory.decoderesource(getresources(), mimgs[0]); mimage.setimagebitmap(mbitmap); mimage.setvisibility(view.visible); } } } // // // float speed = math.abs(x + y + z - last_x - last_y - last_z)/ difftime * 10000; // // if (speed > shake_threshold) { // // } // // last_x = x; // last_y = y; // last_z = z; } } @override public void onaccuracychanged(sensor sensor, int accuracy) { } protected void onpause() { super.onpause(); sensensormanager.unregisterlistener(this); } protected void onresume() { super.onresume(); sensensormanager.registerlistener(this, senaccelerometer, sensormanager.sensor_delay_normal); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); return true; } }
activity_main.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: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=".mainactivity" > <textview android:id="@+id/textview1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="@string/hello_world" /> <imageview android:id="@+id/imageview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textview1" android:layout_centerhorizontal="true" android:layout_margintop="90dp" android:src="@drawable/up" android:visibility="invisible" /> </relativelayout>
manifest:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.accelerometer" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="18" /> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name="com.example.accelerometer.mainactivity" android:screenorientation="portrait" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest>
looking @ code, i'm sure you're getting arrayindexoutofboundsexception
(there may few more problems though).
private int[] mimgs = new int[3]; // mimgs array of 3 elements
when declare array this, maximum possible index 2 , mimgs[2]
accessible (i.e) array.length - 1
.
but in oncreate()
method, have snippet this
mimgs[0] = r.drawable.left; // first element mimgs[1] = r.drawable.right; // second mimgs[2] = r.drawable.up; // third , final possible element of array mimgs[3] = r.drawable.down; // throws arrayindexoutofboundsexception mimgs[3] not valid index array of size 3
Comments
Post a Comment