ギャラリー内の画像を選択するときに、なぜ私はこのエラーを取得していますか?
カメラを使って画像のキャプチャする細かい作業ですが、私はギャラリーで画像を選択していたときに、エラーがアップします。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == CAMERA_REQUEST_CODE){
if(resultCode == Activity.RESULT_OK){
File f = new File(currentPhotoPath);
IDProf.setImageURI(Uri.fromFile(f));
Log.d("taffffffg", "ABsolute Url of Image is " + Uri.fromFile(f));
try {
Bitmap bitmap;
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions);
bitmap=getResizedBitmap(bitmap, 100);
IDProf.setImageBitmap(bitmap);
BitMapToString(bitmap);
String path = android.os.Environment
.getExternalStorageDirectory()
+ File.separator
+ "Phoenix" + File.separator + "default";
f.delete();
OutputStream outFile = null;
File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
try {
outFile = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
outFile.flush();
outFile.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
} else if(requestCode == GALLERY_REQUEST_CODE){
if(resultCode == Activity.RESULT_OK){
Uri selectedImage = data.getData();
String[] filePath = { MediaStore.Images.Media.DATA };
Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null);
c.moveToFirst();
int columnIndex = c.getColumnIndex(filePath[0]);
String picturePath = c.getString(columnIndex);
c.close();
Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
thumbnail=getResizedBitmap(thumbnail, 400);
Log.w("path", picturePath+"");
IDProf.setImageBitmap(thumbnail);
BitMapToString(thumbnail);
}
}
}
public String BitMapToString(Bitmap userImage1) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
userImage1.compress(Bitmap.CompressFormat.PNG, 60, baos);
byte[] b = baos.toByteArray();
long lengthbmp = b.length;
Document_img1 = Base64.encodeToString(b, Base64.DEFAULT);
Log.d("byte_image", String.valueOf(lengthbmp));
return Document_img1;
}
public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
int width = 120;
int height = 180;
float bitmapRatio = (float)width / (float) height;
if (bitmapRatio > 1) {
width = maxSize;
height = (int) (width / bitmapRatio);
} else {
height = maxSize;
width = (int) (height * bitmapRatio);
}
return Bitmap.createScaledBitmap(image, width, height, true);
}
誰もがこれを体験したのですか?私はすでにここに同様の問題を探して、私はまだそれを修正傾けます。私はちょうどそれがBase64でエンコード画像とを表示する必要があるが、それは私が考えるリサイズ上のエラーを持っています。
- ここで私は取得していますエラーです。
java.io.FileNotFoundException:/storage/emulated/0/temp.jpg:オープンに失敗しました:EACCES(パーミッション拒否)AndroidRuntime:致命的な例外:デコードストリームにできない主なプロセス:com.example.eplife、PID:1494 java.langで.RuntimeException:失敗送達結果ResultInfo {ヌル=、リクエスト= 105、結果= -1、データ=意図{DAT =内容://メディア/外部/画像/メディア/ 592 FLG = 0x1の(補足を有する)}}にアンドロイドでヌル・オブジェクト・リファレンス上の仮想メソッドを起動しようと「INT android.graphics.Bitmap.getWidth()」:活性{com.example.eplife / com.example.eplife.ProfileModule.ChangePhoto}:java.lang.NullPointerExceptionが。 android.app.ActivityThread.access $ 1600〜android.app.ActivityThread.handleSendResult(ActivityThread.java:5041)でapp.ActivityThread.deliverResults(ActivityThread.java:4998)(ActivityThread.java:android.os.Looper.loop(Looper.java:148でandroid.os.Handler.dispatchMessage(Handler.java:102)でandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1875))で229)ででcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1321)でjava.lang.reflect.Method.invoke(ネイティブメソッド)でandroid.app.ActivityThread.main(ActivityThread.java:7325) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1211)に起因:java.lang.NullPointerExceptionが:でヌル・オブジェクト・リファレンス上の仮想メソッドを呼び出すための試み「INT android.graphics.Bitmap.getWidth()」 com.exampleでcom.example.eplife.ProfileModule.ChangePhoto.getResizedBitmapでandroid.graphics.Bitmap.createScaledBitmap(Bitmap.java:748)(ChangePhoto.java:239)。android.app.ActivityThreadでandroid.app.ActivityThread.deliverResults(ActivityThread.java:4994)でandroid.app.Activity.dispatchActivityResult(Activity.java:7165)でeplife.ProfileModule.ChangePhoto.onActivityResult(ChangePhoto.java:206) android.os.Handler.dispatchMessageでandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1875)でandroid.app.ActivityThread.access $ 1600〜.handleSendResult(ActivityThread.java:5041)(ActivityThread.java:229) java.lang.reflect.Method.invokeでandroid.app.ActivityThread.main(ActivityThread.java:7325)でandroid.os.Looper.loop(Looper.java:148)で(Handler.java:102)(ネイティブメソッド)com.android.internalでcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1321)で。os.ZygoteInit.main(ZygoteInit.java:1211)
私は私のOnCreate活動にこれを置いていました
if (ContextCompat.checkSelfPermission(ChangePhoto.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(ChangePhoto.this, new String[]{Manifest.permission.CAMERA}, 1);
}
私はすでに、エラーが何であるかを考え出しました。
それが許可されます。
その最初、私はこのことを宣言する必要があります。
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
このOnCreate関数への
// Check if we have read or write permission
if (ContextCompat.checkSelfPermission(ChangePhoto.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(ChangePhoto.this, new String[]{Manifest.permission.CAMERA}, 101);
}
int writePermission = ActivityCompat.checkSelfPermission(ChangePhoto.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int readPermission = ActivityCompat.checkSelfPermission(ChangePhoto.this, Manifest.permission.READ_EXTERNAL_STORAGE);
if (writePermission != PackageManager.PERMISSION_GRANTED || readPermission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
ChangePhoto.this,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
//End
そして、ビットマップの問題は解決されます。私は、この問題を読んで唯一のマシュマロのバージョンであるので、これはAndroidのバージョンに依存だと思います。