【发布时间】:2014-03-18 08:44:27
【问题描述】:
我正在开发使用相机的应用程序,该应用程序允许用户捕获照片并显示到 GridView 中。在将图片保存到应用程序特定文件夹之前它工作正常但是,当是时候在 GridView 中显示它们时,它突然崩溃并给出异常。我附上了编码的东西和Logcat。但是我试图弄清楚,但我做不到。请帮忙!!
这是相机的类:
public class OwnerAddPhoto extends Activity implements OnClickListener {
private Button btnAdd, btnUpload;
private GridView photoGrid;
ArrayList<String> filePath;
File[] listOfFile;
ImageAdapter getSDImgs;
private static final int PIC_FROM_CAMERA = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.owner_photoupload);
btnAdd = (Button) findViewById(R.id.btn_addphoto);
btnUpload = (Button) findViewById(R.id.btn_uploadphoto);
btnAdd.setOnClickListener(this);
btnUpload.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_addphoto:
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
String root = Environment.getExternalStorageDirectory()
.toString();
File DirHomey = new File(root, "/Homey");
DirHomey.mkdirs();
if (DirHomey.isDirectory()) {
Log.d("Directory Available.", DirHomey.toString());
Intent cameraIntent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
Random rdm = new Random();
int n = 1000;
n = rdm.nextInt();
String imgName = "IMG_" + n + ".jpg";
File imgFile = new File(DirHomey, imgName);
if (imgFile.exists()) {
imgFile.delete();
}
Log.d("Image File Created.", imgFile.toString());
Uri extraFilePath = Uri.fromFile(imgFile);
Log.d("IMGPath", extraFilePath.toString());
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
extraFilePath);
startActivityForResult(cameraIntent, PIC_FROM_CAMERA);
}
}
break;
case R.id.btn_uploadphoto:
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_CANCELED && requestCode == PIC_FROM_CAMERA
&& data != null) {
getSDCARDImagePaths();
getSDImgs = new ImageAdapter(this, filePath);
photoGrid.setAdapter(getSDImgs);
} else {
Toast.makeText(this, "Ops.. Error Occurred! Try Again.",
Toast.LENGTH_SHORT).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
private void getSDCARDImagePaths() {
filePath = new ArrayList<String>();
File DirPath = new File(Environment.getExternalStorageDirectory(),
"Homey");
if (DirPath.isDirectory()) {
listOfFile = DirPath.listFiles();
for (int i = 0; i <= listOfFile.length; i++) {
filePath.add(listOfFile[i].getAbsolutePath());
}
}
}
}
这是 LogCat 屏幕:
03-18 04:00:27.386: W/dalvikvm(1240): threadid=1: thread exiting with uncaught exception (group=0xb3aeeb90)
03-18 04:00:27.406: E/AndroidRuntime(1240): FATAL EXCEPTION: main
03-18 04:00:27.406: E/AndroidRuntime(1240): Process: com.example.homeyapp, PID: 1240
03-18 04:00:27.406: E/AndroidRuntime(1240): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity {com.example.homeyapp/com.example.homeyapp.OwnerAddPhoto}: java.lang.ArrayIndexOutOfBoundsException: length=5; index=5
03-18 04:00:27.406: E/AndroidRuntime(1240): at android.app.ActivityThread.deliverResults(ActivityThread.java:3346)
03-18 04:00:27.406: E/AndroidRuntime(1240): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3389)
03-18 04:00:27.406: E/AndroidRuntime(1240): at android.app.ActivityThread.access$1200(ActivityThread.java:135)
03-18 04:00:27.406: E/AndroidRuntime(1240): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1445)
03-18 04:00:27.406: E/AndroidRuntime(1240): at android.os.Handler.dispatchMessage(Handler.java:102)
03-18 04:00:27.406: E/AndroidRuntime(1240): at android.os.Looper.loop(Looper.java:137)
03-18 04:00:27.406: E/AndroidRuntime(1240): at android.app.ActivityThread.main(ActivityThread.java:4998)
03-18 04:00:27.406: E/AndroidRuntime(1240): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 04:00:27.406: E/AndroidRuntime(1240): at java.lang.reflect.Method.invoke(Method.java:515)
03-18 04:00:27.406: E/AndroidRuntime(1240): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
03-18 04:00:27.406: E/AndroidRuntime(1240): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
03-18 04:00:27.406: E/AndroidRuntime(1240): at dalvik.system.NativeStart.main(Native Method)
03-18 04:00:27.406: E/AndroidRuntime(1240): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=5
03-18 04:00:27.406: E/AndroidRuntime(1240): at com.example.homeyapp.OwnerAddPhoto.getSDCARDImagePaths(OwnerAddPhoto.java:117)
03-18 04:00:27.406: E/AndroidRuntime(1240): at com.example.homeyapp.OwnerAddPhoto.onActivityResult(OwnerAddPhoto.java:96)
03-18 04:00:27.406: E/AndroidRuntime(1240): at android.app.Activity.dispatchActivityResult(Activity.java:5435)
03-18 04:00:27.406: E/AndroidRuntime(1240): at android.app.ActivityThread.deliverResults(ActivityThread.java:3342)
03-18 04:00:27.406: E/AndroidRuntime(1240): ... 11 more
【问题讨论】:
-
在
OwnerAddPhoto.java文件中发布您的 117 行。
标签: android indexoutofboundsexception