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)
Was haben Sie in Zeile 93 in MainActivity? Makesure nichts ist Null in doInBackground – Raghavendra
Hallo Raghavendra, die Zeile 90 ist private Klasse Encode_image erweitert AsyncTask {, und Zeile 93 ist Bitmap = BitmapFactory.decodeFile (file_uri.getPath()); –
dann denke ich, file_uri ist null. Bitte machen Sie einen Null-Check – Raghavendra