0

Dies ist mein Code über Android Bild hochladen mit Android Studio. Meine Apps stürzen ab, nachdem ich das Image aufgenommen habe (die Apps wurden nicht mehr ausgeführt), aber es funktioniert im virtuellen Emulator (selbe API 19), und der Logcat meldet mir einen Fehler beim Ausführen des Hintergrunds. Kann mir jemand helfen, meinen Fehler zu finden?Android Studio Absturz nach Kamera Absicht in realen Gerät (virtuelle Emulator funktioniert einwandfrei)

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); 
     } 

Dies ist der Fehlerausgang:

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

Was haben Sie in Zeile 93 in MainActivity? Makesure nichts ist Null in doInBackground – Raghavendra

+0

Hallo Raghavendra, die Zeile 90 ist private Klasse Encode_image erweitert AsyncTask {, und Zeile 93 ist Bitmap = BitmapFactory.decodeFile (file_uri.getPath()); –

+0

dann denke ich, file_uri ist null. Bitte machen Sie einen Null-Check – Raghavendra

Antwort

0

, wenn Sie sehen, Sie Fotos mit der Frontkamera nehmen, aber die App stürzt ab, wenn man sich mit der Rückseite der Kamera nehmen

die Lösung ist hier

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

Änderung bitmap.compress von 100 bis 75

Dies sollte das Problem beheben.