【问题标题】:java.lang.IndexOutOfBoundsException: Invalid index 5, size is 4 [duplicate]java.lang.IndexOutOfBoundsException:索引 5 无效,大小为 4 [重复]
【发布时间】:2017-07-26 11:29:27
【问题描述】:

我尝试运行监护人项目的相机密码,但是当我按下按钮时,它被强制关闭。 这是我的 logcat 文件:

07-26 06:49:02.639 27157-27157/info.guardianproject.iocipher.camera E/AndroidRuntime: 致命异常: main 进程:info.guardianproject.iocipher.camera,PID:27157 java.lang.RuntimeException:无法恢复活动 {info.guardianproject.iocipher.camera/info.guardianproject.iocipher.camera.StillCameraActivity}: java.lang.IndexOutOfBoundsException:索引 5 无效,大小为 4 在 android.app.ActivityThread.performResumeActivity(ActivityThread.java:2774) 在 android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2803) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2238) 在 android.app.ActivityThread.access$800(ActivityThread.java:135) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5001) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.IndexOutOfBoundsException: Invalid index 5, size 是 4 在 java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 在 java.util.ArrayList.get(ArrayList.java:308) 在 info.guardianproject.iocipher.camera.CameraBaseActivity.tryCreateCamera(CameraBaseActivity.java:222) 在 info.guardianproject.iocipher.camera.CameraBaseActivity.initCamera(CameraBaseActivity.java:180) 在 info.guardianproject.iocipher.camera.CameraBaseActivity.onResume(CameraBaseActivity.java:174) 在 info.guardianproject.iocipher.camera.StillCameraActivity.onResume(StillCameraActivity.java:107) 在 android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1192) 在 android.app.Activity.performResume(Activity.java:5310) 在 android.app.ActivityThread.performResumeActivity(ActivityThread.java:2764) 在 android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2803) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2238) 在 android.app.ActivityThread.access$800(ActivityThread.java:135) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5001) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 在 dalvik.system.NativeStart.main(Native Method)

这是我的 stillcamera.java 文件:

public class StillCameraActivity extends CameraBaseActivity {

    private String mFileBasePath = null;

    private boolean isRequest = false;
    private ArrayList<String> mResultList = null;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mFileBasePath = getIntent().getStringExtra("basepath");

        isRequest = getIntent().getAction() != null && getIntent().getAction().equals(MediaStore.ACTION_IMAGE_CAPTURE);
        mResultList = new ArrayList<String>();

        button.setBackgroundResource(R.drawable.ic_action_camera);
        buttonSelfie.setBackgroundResource(R.drawable.ic_action_switch_camera);
    }

    @Override
    public void onPictureTaken(final byte[] data, Camera camera) {      
        File fileSecurePicture;
        try {

            if (overlayView != null)
                overlayView.setBackgroundResource(R.color.flash);

            long mTime = System.currentTimeMillis();
            fileSecurePicture = new File(mFileBasePath,"secure_image_" + mTime + ".jpg");

            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileSecurePicture));
            out.write(data);
            out.flush();
            out.close();

            mResultList.add(fileSecurePicture.getAbsolutePath());

            Intent intent = new Intent("new-media");
              // You can also include some extra data.
              intent.putExtra("media", fileSecurePicture.getAbsolutePath());
              LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

            Intent intentResult = new Intent().putExtra(MediaStore.EXTRA_OUTPUT, mResultList.toArray(new String[mResultList.size()]));          
            setResult(Activity.RESULT_OK, intentResult);

            view.postDelayed(new Runnable()
            {
                @Override
                public void run() {
                    overlayView.setBackgroundColor(Color.TRANSPARENT);

                    resumePreview();
                }
            },100);


        } catch (Exception e) {
            e.printStackTrace();
            setResult(Activity.RESULT_CANCELED);

        }

    }

    @Override
    public void onPause() {

        super.onPause();
    }

    @Override
    public void onResume() {
        super.onResume();
    }
}
 

【问题讨论】:

  • 我看到了,但对我没有帮助! :(
  • 打开CameraBaseActivity.java,找到方法tryCreateCamera(第222行)。您可以通过在 IDE 中单击正确的登录位置来打开它

标签: android encryption camera logcat


【解决方案1】:

改变这个

Intent intentResult = new Intent().putExtra(MediaStore.EXTRA_OUTPUT, mResultList.toArray(new String[mResultList.size()]));          
            setResult(Activity.RESULT_OK, intentResult);

Intent intentResult = new Intent().putExtra(MediaStore.EXTRA_OUTPUT, mResultList.toArray(new String[mResultList.size() - 1]));          
            setResult(Activity.RESULT_OK, intentResult);

【讨论】:

  • 列表大小是 5 并且从 zerp 开始,所以你必须在你的代码中设置这个,new String[mResultList.size()-1]
  • 我这样做了,但是没有用!! :(
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多