private class Encode_image extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
bitmap = BitmapFactory.decodeFile(file_uri.getPath());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
bitmap.recycle();
byte[] array = stream.toByteArray();
encoded_string = Base64.encodeToString(array, 0);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
makeRequest();
}
}
private void makeRequest() {
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest request = new StringRequest(Request.Method.POST, POST_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String,String> map = new HashMap<>();
map.put("encoded_string",encoded_string);
map.put("image_name",image_name);
return map;
}
};
requestQueue.add(request);
}
private void getFileUri() {
String uuid = UUID.randomUUID().toString();
imageName=uuid;
image_name = uuid + ".jpg";
file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
+ File.separator + image_name
);
//file_uri = Uri.fromFile(file);
file_uri = FileProvider.getUriForFile(PhotoActivity.this,
BuildConfig.APPLICATION_ID + ".provider",
file);
}
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /external_files/Pictures/aba094a2-3f15-405f-9203-fdc4245dc003.jpg (No such file or directory)
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.gabrieluliano.my_sick_app, PID: 8639
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:318)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
at com.example.gabrieluliano.my_sick_app.PhotoActivity$Encode_image.doInBackground(PhotoActivity.java:347)
at com.example.gabrieluliano.my_sick_app.PhotoActivity$Encode_image.doInBackground(PhotoActivity.java:331)
at android.os.AsyncTask$2.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
try(InputStream is = new URL( file_uri.getPath() ).openStream()){
bitmap = BitmapFactory.decodeStream(is);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
bitmap.recycle();
byte[] array = stream.toByteArray();
encoded_string = Base64.encodeToString(array, 0);
return null;
}
catch(Exception e){
return null;
}
bitmap = BitmapFactory.decodeFile(file_uri.getPath());
改为
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(file_uri));
但是当然,首先从文件中制作一个位图是不好的。
当然,您应该“按原样”上传文件,而不要乱搞位图和BitMapFactory。
如何解决它。请帮助我。提前谢谢。
我有一个定义权限的文件。该代码适用于较低版本的android,但8.0及更高版本不适用。所以我明确地要求进行自我许可检查。这段代码昨天还在工作,但突然我再次获得了相同的权限拒绝错误。
问题内容: 嘿,我不确定为什么每次选择图库中的图像时都会出现这种情况吗? 这是代码: 错误: 问题答案: 不要假设有文件路径。Android 4.4及更高版本即将删除它们。而且您获得的uri已经没有路径。 您仍然可以通过()或文件描述符访问文件内容。 在这里进行了解释:ContentProviders:打开一个文档(向下滚动,指向该节的链接似乎已损坏) 而且确实适用于较旧的android版本。
我是Android Studio的新手,我正在努力使用其文件名而不是其ID加载图像。 到目前为止,我只知道这些,但它抛出了这个FileNotFoundException: 无法解码流: java.io.文件未找到异常: /存储/模拟/0/分辨率/可绘制/图像.png:打开失败: ENOENT (没有这样的文件或目录) 我还将这些权限添加到了Android清单中: 我真的不知道为什么它会抛出异常,我
我正试图从我的数据库联机获取图片,在我的“ImageLink”中,这是我表中的datafield,我把我上传的图片的url放在那里,但不幸的是,它给了我这个错误。 以下是我在OnPostExecute中的代码:
问题内容: 我试图在线从数据库中的表中的数据字段“ imagelink”中获取图片,我将上传的图片的网址放在此处,但不幸的是,它给了我这个错误。 这是我在onPostExecute中的代码: 问题答案: 使用代替。