0

これは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)

+0

MainActivityでは93行目に何がありますか?何もないのはdoInBackgroundでnullです – Raghavendra

+0

こんにちはRaghavendraさん、90行目はプライベートクラスですEncode_image AsyncTask {{、93行目はbitmap = BitmapFactory.decodeFile(file_uri.getPath()); –

+0

私はfile_uriがnullだと思います。ヌルチェックをしてください – Raghavendra

答えて

0

ご覧の場合は、バックカメラで

それらを取る場合、あなたはフロントカメラで写真を撮ることができますが、アプリがクラッシュします解決策はここにあります

bitmap.compress(Bitmap.CompressFormat.JPEG,100,stream); 

変更bitmap.compress 100から75

これで問題は解決します。

関連する問題