2017-04-13 15 views
0

Ich versuche, ein Bild an meinen Server zu senden. Ich tue dies, indem Sie einen Blick auf Tutorial im LINKAndroid Image Upload auf den Server von Kamera Fehler

nehmen aber ich brauche Foto von der Kamera nahm zu schicken, nicht aus der Galerie, damit ich ein paar Änderungen gemacht, und ich erhalte eine Fehlermeldung wie folgt aus:

FATALE AUSNAHME: Haupt Prozess: com.example.audriusalekna.camerapht, PID: 25792 java.lang.RuntimeException: Fehler liefert Ergebnis ResultInfo {wer = null, request = 1, result = -1, data = Intent {act = Inline-Daten (hat Extras)}} zu Aktivität {com.example.audriusalekna.camerapht/com.example.audriusalekna.camerapht.MainActivity}: java.lang.NullPointerException: Versuch, die virtuelle Methode 'boolea aufzurufen n android.graphics.Bitmap.compress (android.graphics.Bitmap $ CompressFormat, int, java.io.OutputStream) 'auf eine Null-Objekt Referenz bei android.app.ActivityThread.DeliverResults (ActivityThread.java:3887) bei Android .app.ActivityThread.handleSendResult (ActivityThread.java:3930) bei android.app.ActivityThread.access $ 1300 (ActivityThread.java:178) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1561) bei android.os.Handler.dispatchMessage (Handler.java:111) bei android.os.Looper.loop (Looper.java:194) bei android.app.ActivityThread.main (ActivityThread.java:5692) bei java.lang.reflect.Method.invoke (Native Methode) bei java.lang.reflect.Method.invoke (Methode.java:372) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. java: 959) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:754) Verursacht von: java.lang.NullPointerException: Versuch, virtuelle Methode aufzurufen 'boolean android.graphics.Bitmap.compress (android .graphics.Bitmap $ CompressFormat, int, java.io.OutputStream) 'für einen Null-Objektverweis bei com.example.audriusalekna.camerapht.MainActivity.onActivityResult (MainActivity.java:70) bei android.app.Activity.dispatchActivityResult (Activity.java:6346) bei android.app.ActivityThread.deliverResults (ActivityThread.java:3883) bei android.app.ActivityThread.handleSendResult (ActivityThread.java:3930) bei android.app.ActivityThread.access $ 1300 (ActivityThread.java:178) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1561) bei android.os.Handler.dispatchMessage (Handler.java:111) bei android.os.Looper.loop (Looper.java:194) bei android.app.ActivityThread.main (ActivityThread.java:5692) bei java.lang.reflect.Method.invoke (systemeigene Methode) bei java.lang.reflect.Method.invoke (Method.java:372)

Mein Code von MainActivity ist hier:

package com.example.audriusalekna.camerapht; 
 

 
import android.app.Activity; 
 
import android.content.Intent; 
 
import android.content.pm.PackageManager; 
 
import android.graphics.Bitmap; 
 
import android.graphics.BitmapFactory; 
 
import android.graphics.Canvas; 
 
import android.graphics.Color; 
 
import android.graphics.Paint; 
 
import android.graphics.PorterDuff; 
 
import android.graphics.PorterDuffXfermode; 
 
import android.net.Uri; 
 
import android.provider.MediaStore; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.os.Bundle; 
 
import android.util.Base64; 
 
import android.view.View; 
 
import android.widget.Button; 
 
import android.widget.ImageView; 
 
import android.widget.Toast; 
 

 
import com.android.volley.AuthFailureError; 
 
import com.android.volley.Request; 
 
import com.android.volley.RequestQueue; 
 
import com.android.volley.Response; 
 
import com.android.volley.VolleyError; 
 
import com.android.volley.toolbox.StringRequest; 
 
import com.android.volley.toolbox.Volley; 
 

 
import java.io.ByteArrayOutputStream; 
 
import java.util.HashMap; 
 
import java.util.Map; 
 

 
import static android.R.attr.bitmap; 
 
import static android.R.attr.x; 
 
import static android.R.attr.y; 
 
import static android.provider.ContactsContract.CommonDataKinds.Website.URL; 
 

 

 
public class MainActivity extends AppCompatActivity { 
 
    static final int REQUEST_IMAGE_CAPTURE = 1; 
 
    private Uri fileUri; 
 
    private ImageView imageView; 
 
    Bitmap bitmap; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 

 
     Button cameraBtn = (Button) findViewById(R.id.push_button); 
 
     imageView = (ImageView)findViewById(R.id.imageTest); 
 

 
     cameraBtn.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
 
       startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE); 
 
      } 
 
     }); 
 
    } 
 

 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 
     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { 
 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
 
      imageView.setImageBitmap(photo); 
 

 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
 
      byte[] imageBytes = baos.toByteArray(); 
 
      final String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
 

 
      //sending image to server 
 
      StringRequest request = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>(){ 
 
       @Override 
 
       public void onResponse(String s) { 
 

 
        if(s.equals("true")){ 
 
         Toast.makeText(MainActivity.this, "Uploaded Successful", Toast.LENGTH_LONG).show(); 
 
        } 
 
        else{ 
 
         Toast.makeText(MainActivity.this, "Some error occurred!", Toast.LENGTH_LONG).show(); 
 
        } 
 
       } 
 
      },new Response.ErrorListener(){ 
 
       @Override 
 
       public void onErrorResponse(VolleyError volleyError) { 
 
        Toast.makeText(MainActivity.this, "Some error occurred -> "+volleyError, Toast.LENGTH_LONG).show();; 
 
       } 
 
      }) { 
 
       //adding parameters to send 
 
       @Override 
 
       protected Map<String, String> getParams() throws AuthFailureError { 
 
        Map<String, String> parameters = new HashMap<String, String>(); 
 
        parameters.put("image", imageString); 
 
        return parameters; 
 
       } 
 
      }; 
 

 
      RequestQueue rQueue = Volley.newRequestQueue(MainActivity.this); 
 
      rQueue.add(request); 
 

 
     } 
 
     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK && data != null && data.getData() != null) { 
 
      Uri filePath = data.getData(); 
 

 
      try { 
 
       //getting image from gallery 
 
       bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 
 

 
       //Setting image to ImageView 
 
       imageView.setImageBitmap(bitmap); 
 
      } catch (Exception e) { 
 
       e.printStackTrace(); 
 
      } 
 
     } 
 
    } 
 
}

+0

Wenn Sie das Foto senden, sehen Sie es in Ihrem 'ImageView'? – Guillaume

+0

Ich denke, dieser Link hilft Ihnen voll http://stackoverflow.com/questions/8373755/java-lang-runtimexception-failure-delivering-result-resultinfowho-null-reque –

+0

'java.lang.NullPointerException: Versuch, virtuelle aufzurufen Methode 'boolean android.graphics.Bitmap.compress (android.graphics.Bitmap $ CompressFormat, int, java.io.OutputStream)' auf eine Null-Objektreferenz '. Ergreifen Sie Ihre Maßnahmen. – greenapps

Antwort

0

Ihre Bitmap ist null, um was Sie tun möchten Sie die Datei localy speichern müssen und als es senden. Auf dem Onclick, die die Kamera Absicht nennt dies zu tun:

Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE"); 
File file = new File(YOUR_FILE_PATH + "/FILE.jpg"); 
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE); 

Und später onResult nehmen Sie die Datei aus dem Pfad wie folgt aus:

File f = new File(YOUR_FILE_PATH + "/FILE.jpg"); 
Bitmap bitmap=null; 
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
try { 
    bitmap = BitmapFactory.decodeStream(new FileInputStream(f), null, options); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 
imageView.setImageBitmap(bitmap); 

Hoffe, es hilft.

0

@greenapps Lösung funktioniert! Ich habe gerade Bitmap.Compress geändert (Bitmap.CompressFormat.JPEG, 100, baos); zu photo.compress (Bitmap.CompressFormat.JPEG, 100, baos);

+0

Bitte geben Sie das nicht als Antwort an. Entfernen Sie es. Stattdessen sollten Sie den Kommentator einladen, den Kommentar als Antwort zu veröffentlichen, wenn Sie der Meinung sind, dass eine Antwort da sein sollte. – greenapps