1

図書館プロジェクトで活動をしています。その活動から、ライブラリから画像を取得しようとしています。1,000 回に 1 回 (メタファー)、以下のコードは正常に動作します。しかし、ほとんどの場合、画像を選択した後、アプリケーションは黒い画面で動かなくなります。

 Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
 intent.setType("image/* video/*");
 startActivityForResult(intent, REQUEST_GALLERY);

ログ

これは成功のシナリオです:

06-22 11:22:16.559 19038-19038/com.xyz D/SELECT_IMAGE: onCreate
06-22 11:22:16.869 19038-19038/com.xyz D/SELECT_IMAGE: onResume
06-22 11:22:24.949 19038-19038/com.xyz D/SELECT_IMAGE: Before startActivityForResult
06-22 11:22:24.959 19038-19038/com.xyz D/SELECT_IMAGE: After startActivityForResult
06-22 11:22:32.359 19038-19038/com.xyz D/SELECT_IMAGE: RESULT onActivityResult
06-22 11:22:32.429 19038-19038/com.xyz D/SELECT_IMAGE: onResume

この後、もう一度試してみましたが、これら2つのログだけで、スタックしました

06-22 11:23:02.919 19038-19038/com.xyz D/SELECT_IMAGE: Before startActivityForResult
06-22 11:23:02.929 19038-19038/com.xyz D/SELECT_IMAGE: After startActivityForResult

EDITED:私が得たログadb shell dumpsys activity top

java.lang.IndexOutOfBoundsException: Invalid index 6, size is 3
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
    at java.util.ArrayList.get(ArrayList.java:308)
    at com.android.server.am.ActivityStack.getDumpActivitiesLocked(ActivityStack.java:6544)
    at com.android.server.am.ActivityStackSupervisor.getDumpActivitiesLocked(ActivityStackSupervisor.java:5734)
    at com.android.server.am.ActivityManagerService.dumpActivity(ActivityManagerService.java:17777)
    at com.android.server.am.ActivityManagerService.dump(ActivityManagerService.java:16936)
    at android.os.Binder.dump(Binder.java:334)
    at android.os.Binder.onTransact(Binder.java:292)
    at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:2568)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3242)
    at android.os.Binder.execTransact(Binder.java:461)
4

1 に答える 1

-1

これを on activityResult と一緒にこのように使用します

public class MainActivity extends AppCompatActivity {
final static int REQUEST_GALLERY=1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/* video/*");
    startActivityForResult(intent, REQUEST_GALLERY);
}
@Override
protected void onActivityResult(int requestCode, int responseCode,
                                Intent intent) {
    Toast.makeText(getApplicationContext(),"Recieved",Toast.LENGTH_LONG).show();
     if (requestCode==REQUEST_GALLERY)
    {
        if(responseCode==RESULT_OK)
        {
            Uri selectedImage = intent.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
            Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
            ImageView imageView = (ImageView) findViewById(R.id.img_view);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
        }
        }
        }
    }
于 2016-06-22T07:32:33.390 に答える