これはAndroidスタジオを使用するAndroidアップロード画像に関する私のコードです。私のアプリは画像をキャプチャした後にクラッシュします(アプリケーションは機能しなくなりました)が、バーチャルエミュレータ(同じAPI 19)でうまくいきました。の実行中にエラーが発生します。誰かが私の間違いを見つけるのを助けることができますか?Androidスタジオは、実際のデバイスでのカメラの意図の後にクラッシュする(仮想エミュレータは正常に動作しています)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.start);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
getFileUri();
i.putExtra(MediaStore.EXTRA_OUTPUT,file_uri);
startActivityForResult(i,10);
}
});
}
private void getFileUri() {
image_name = "testing123.jpg";
file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
+File.separator + image_name);
file_uri = Uri.fromFile(file);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 10 && resultCode==RESULT_OK)
{
new Encode_image().execute();
}
}
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);
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, "http://mygplobang.com/tut_connection.php",
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);
}
これはエラー出力です:
FATAL EXCEPTION: AsyncTask #1 Process: com.example.jeffreykhang.kas, PID: 6879 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by: java.lang.NullPointerException at com.example.jeffreykhang.kas.MainActivity$Encode_image.doInBackground(MainActivity.java:93) at com.example.jeffreykhang.kas.MainActivity$Encode_image.doInBackground(MainActivity.java:90) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)
MainActivityでは93行目に何がありますか?何もないのはdoInBackgroundでnullです – Raghavendra
こんにちはRaghavendraさん、90行目はプライベートクラスですEncode_image AsyncTask {{、93行目はbitmap = BitmapFactory.decodeFile(file_uri.getPath()); –
私はfile_uriがnullだと思います。ヌルチェックをしてください – Raghavendra