2016-04-05 5 views
0

Hier ist meine zwei Aktivität. Ich versuche, das Bild in einer Bildansicht anderer Aktivitäten anzuzeigen. Für die Kamera funktioniert es gut Aber für die Galerie wird es nicht in der Bildansicht angezeigt. d. h. nach der Auswahl des Bildes in der Bildansicht scheint es leer. Ich habe viele Antworten auf SO gesehen. Aber keiner von ihnen funktioniert für mich.gallery Bild nicht in der Bildansicht angezeigt

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.Typeface; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.File; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

/** 
* @author aditya 
*/ 
public class UploadFinding extends BaseActivity { 


    // LogCat tag 
    private static final String TAG = UploadFinding.class.getSimpleName(); 
    Bitmap b; 

    public static final String IMAGE_URL = "imageURL"; 
    // Camera activity request codes 
    private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; 
    private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 1337; 
    String mCurrentPhotoPath; 
    String imgDecodableString; 
    public static final int MEDIA_TYPE_IMAGE = 1; 
    public static final int MEDIA_TYPE_VIDEO = 2; 



    protected static final int RESULT_LOAD_IMAGE = 1; 
    Button capture_photo, capture_video; 

    private Uri mFileUri; 
    TextView textview1,textview2,textview3; 

    private final Context mContext = this; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     /** 
     * Adding our layout to parent class frame layout. 
     */ 
     getLayoutInflater().inflate(R.layout.upload_finding_layout, frameLayout); 



     //for Design 
     textview1 = (TextView)findViewById(R.id.textView1); 
     Typeface face1= Typeface.createFromAsset(getAssets(), "fonts/AlexBrush-Regular.ttf"); 
     textview1.setTypeface(face1); 

     textview2 = (TextView)findViewById(R.id.textView2); 
     Typeface face2= Typeface.createFromAsset(getAssets(), "fonts/AlexBrush-Regular.ttf"); 
     textview2.setTypeface(face2); 

     textview3 = (TextView)findViewById(R.id.textView3); 
     Typeface face3= Typeface.createFromAsset(getAssets(), "fonts/AlexBrush-Regular.ttf"); 
     textview3.setTypeface(face3); 



     capture_photo = (Button) findViewById(R.id.capture_photo); 
     capture_video = (Button) findViewById(R.id.capture_video); 


     capture_photo.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 


       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(UploadFinding.this); 
       alertDialogBuilder.setTitle("Capture"); 
       alertDialogBuilder.setPositiveButton("From Camera", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           Intent cameraIntent = new Intent(
             MediaStore.ACTION_IMAGE_CAPTURE); 
           mFileUri = getOutputMediaFileUri(1); 
           cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mFileUri); 
           startActivityForResult(cameraIntent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
          } 

         }) 
         .setNegativeButton("From Gallery", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           Intent i = new Intent(Intent.ACTION_PICK, 
             MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
           mFileUri = getOutputMediaFileUri(1); 
           i.putExtra(MediaStore.EXTRA_OUTPUT, mFileUri); 
           startActivityForResult(i, RESULT_LOAD_IMAGE); 
          } 
         }); 
       AlertDialog alertDialog = alertDialogBuilder.create(); 
       alertDialog.show(); 

      } 

     }); 


//End Btn_Click 


     // For Camera 

     capture_video.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 


       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(UploadFinding.this); 
       alertDialogBuilder.setTitle("Capture"); 
       alertDialogBuilder.setPositiveButton("From Camera", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
// 
           Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE); 
           cameraIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 5); 


           mFileUri = getOutputMediaFileUri(2); 

           cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mFileUri); 
           cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
           cameraIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10); 
           startActivityForResult(cameraIntent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE); 
          } 
         }) 
         .setNegativeButton("From Gallery", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           Intent i = new Intent(Intent.ACTION_PICK, 
             MediaStore.Video.Media.EXTERNAL_CONTENT_URI); 
           i.putExtra(MediaStore.EXTRA_OUTPUT, mFileUri); 
           startActivityForResult(i, RESULT_LOAD_IMAGE); 
           finish(); 
          } 
         }); 
       AlertDialog alertDialog = alertDialogBuilder.create(); 
       alertDialog.show(); 
      } 

     }); 

     /** 
     * Setting title and itemChecked 
     */ 
     mDrawerList.setItemChecked(position, true); 
     setTitle(listArray[position]); 

    } 


    /** 
    * Here we store the file url as it will be null after returning from camera 
    * app 
    */ 
    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 

     // save file url in bundle as it will be null on screen orientation 
     // changes 
     outState.putParcelable("file_uri", mFileUri); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 

     // get the file url 
     mFileUri = savedInstanceState.getParcelable("file_uri"); 
    } 

// 
// 
    //multipart 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // if the result is capturing Image 
     if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 


       // successfully captured the image 
       // launching upload activity 
       launchUploadActivity(true); 


      } else if (resultCode == RESULT_CANCELED) { 

       // user cancelled Image capture 
       Toast.makeText(getApplicationContext(), 
         "User cancelled image capture", Toast.LENGTH_SHORT) 
         .show(); 

      } else { 
       // failed to capture image 
       Toast.makeText(getApplicationContext(), 
         "Sorry! Failed to capture image", Toast.LENGTH_SHORT) 
         .show(); 
      } 

     } else if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 

       // video successfully recorded 
       // launching upload activity 
       launchUploadActivity1(true); 

      } else if (resultCode == RESULT_CANCELED) { 

       // user cancelled recording 
       Toast.makeText(getApplicationContext(), 
         "User cancelled video recording", Toast.LENGTH_SHORT) 
         .show(); 

      } else { 
       // failed to record video 
       Toast.makeText(getApplicationContext(), 
         "Sorry! Failed to record video", Toast.LENGTH_SHORT) 
         .show(); 
      } 
     } 

     if(requestCode==RESULT_LOAD_IMAGE){ 
      if (resultCode == RESULT_OK) { 

       launchUploadActivity2(true); 
      } 
     } 
//  { 
    } 


    private void launchUploadActivity(boolean isImage) { 
     Intent i = new Intent(UploadFinding.this, Finding_Preview_Image.class); 
     i.putExtra("filePath", mFileUri.getPath()); 
     i.putExtra("isImage", isImage); 
     startActivity(i); 
    } 

    private void launchUploadActivity1(boolean isImage) { 
     Intent i = new Intent(UploadFinding.this, Finding_preview_video.class); 
     i.putExtra("filePath", mFileUri.getPath()); 
     i.putExtra("isImage", isImage); 
     startActivity(i); 
    } 

    private void launchUploadActivity2(boolean isImage) { 
     Intent i = new Intent(UploadFinding.this, Finding_Preview_Image.class); 
     i.putExtra("filePath", mFileUri.getPath()); 
     i.putExtra("isImage", isImage); 
     startActivity(i); 
    } 

    private Uri getOutputMediaFileUri(int type) { 
     return Uri.fromFile(getOutputMediaFile(type)); 
    } 

    // Return image/video 
    private static File getOutputMediaFile(int type) { 
     // External sdcard location 
     File mediaStorageDir = new File(
       Environment 
         .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
       Config.IMAGE_DIRECTORY_NAME); 
//  // Save a file: path for use with ACTION_VIEW intents 
//  mCurrentPhotoPath = "file:" + image.getAbsolutePath(); 
//  return image; 
     // Create the storage directory if it does not exist 
     if (!mediaStorageDir.exists()) { 
      if (!mediaStorageDir.mkdirs()) { 
       Log.d(TAG, "Oops! Failed create " 
         + Config.IMAGE_DIRECTORY_NAME + " directory"); 
       return null; 
      } 
     } 

     // Create a media file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
       Locale.getDefault()).format(new Date()); 
     File mediaFile; 
     if (type == MEDIA_TYPE_IMAGE) { 
      mediaFile = new File(mediaStorageDir.getPath() + File.separator 
        + "IMG_" + timeStamp + ".jpg"); 
     } else if (type == MEDIA_TYPE_VIDEO) { 
      mediaFile = new File(mediaStorageDir.getPath() + File.separator 
        + "VID_" + timeStamp + ".mp4"); 
     } 

     else { 
      return null; 
     } 

     return mediaFile; 

    } 
} 

Nächste Aktivität

import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.ProgressBar; 
import android.widget.Toast; 
import android.widget.VideoView; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.mime.content.FileBody; 
import org.apache.http.entity.mime.content.StringBody; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 

import java.io.File; 
import java.io.IOException; 

public class Finding_Preview_Image extends BaseActivity { 

    private Button finding_upload_button; 

    // private ImageView photo; 
// multipart 
// LogCat tag 
    private static final String TAG = UploadFinding.class.getSimpleName(); 

    private ProgressBar progressBar; 
    private String filePath = null; 
    // private TextView txtPercentage; 
    private ImageView photo; 
    private EditText fullname; 
    private VideoView vidPreview; 
    private Button Finding_upload_button; 
    long totalSize = 0; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getLayoutInflater().inflate(R.layout.finding__preview_image, frameLayout); 

     finding_upload_button = (Button) findViewById(R.id.finding_upload_button); 
     photo = (ImageView) findViewById(R.id.find_Image); 
     fullname = (EditText) findViewById(R.id.editText); 
     EditText fullname = (EditText) findViewById(R.id.editText); 
     EditText location = (EditText) findViewById(R.id.editText2); 
     EditText description = (EditText) findViewById(R.id.editText3); 
     ImageView photo = (ImageView) findViewById(R.id.find_Image); 
     //multipart 
     // txtPercentage = (TextView) findViewById(R.id.txtPercentage); 

     progressBar = (ProgressBar) findViewById(R.id.progressBar); 

     // vidPreview = (VideoView) findViewById(R.id.videoPreview); 


     // Receiving the data from previous activity 
     Intent i = getIntent(); 

     // image or video path that is captured in previous activity 
     filePath = i.getStringExtra("filePath"); 

     // boolean flag to identify the media type, image or video 
     boolean isImage = i.getBooleanExtra("isImage", true); 

     if (filePath != null) { 
      // Displaying the image or video on the screen 
      Log.i("UploadApp", "file path is null"); 
      previewMedia(isImage); 
     } else { 
      Toast.makeText(getApplicationContext(), 
        "Sorry, file path is missing!", Toast.LENGTH_LONG).show(); 
     } 

     finding_upload_button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // uploading the file to server 
       new UploadFileToServer().execute(); 
      } 
     }); 


    } 
// 
    //Displaying captured image/video on the screen 

    private void previewMedia(boolean isImage) { 


     // Checking whether captured media is image or video 
     if (isImage) { 
      photo.setVisibility(View.VISIBLE); 
      // vidPreview.setVisibility(View.GONE); 
      // bimatp factory 
      BitmapFactory.Options options = new BitmapFactory.Options(); 


      // down sizing image as it throws OutOfMemory Exception for larger 
      // images 
      options.inSampleSize = 88; 


      final Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); 
      options.inJustDecodeBounds = true; 

      photo.setImageBitmap(bitmap); 
     } 

     //else { 
//   photo.setVisibility(View.GONE); 
//   vidPreview.setVisibility(View.VISIBLE); 
//   vidPreview.setVideoPath(filePath); 
//   // start playing 
//   vidPreview.start(); 
//  } 
    } 

    /** 
    * Uploading the file to server 
    * */ 
    private class UploadFileToServer extends AsyncTask<Void, Integer, String> { 
     @Override 
     protected void onPreExecute() { 
      // setting progress bar to zero 
      progressBar.setProgress(0); 
      super.onPreExecute(); 
     } 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 
      // Making progress bar visible 
      progressBar.setVisibility(View.VISIBLE); 

      // updating progress bar value 
      progressBar.setProgress(progress[0]); 

      // updating percentage value 
      // txtPercentage.setText(String.valueOf(progress[0]) + "%"); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      return uploadFile(); 
     } 

     @SuppressWarnings("deprecation") 
     private String uploadFile() { 
      String responseString = null; 

      try { 

       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL); 



       Log.i("UploadApp", "upload url: " + Config.FILE_UPLOAD_URL); 


       AndroidMultiPartEntity entity; 
       entity = new AndroidMultiPartEntity(
         new AndroidMultiPartEntity.ProgressListener() { 

          @Override 
          public void transferred(long num) { 
           publishProgress((int) ((num/(float) totalSize) * 100)); 
          } 
         }); 

       File sourceFile; 
       sourceFile = new File(filePath); 

       Log.i("UploadApp", "file path: " + filePath); 

       // Adding file data to http body 
       entity.addPart("image", new FileBody(sourceFile)); 
       entity.addPart("fullname", new StringBody(fullname.getText().toString())); 


       totalSize = entity.getContentLength(); 
       httppost.setEntity(entity); 

       // Making server call 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity r_entity = response.getEntity(); 

       int statusCode = response.getStatusLine().getStatusCode(); 
       if (statusCode == 200) { 
        // Server response 
        responseString = EntityUtils.toString(r_entity); 
       } else { 
        responseString = "Error occurred! Http Status Code: " 
          + statusCode; 
       } 

      } catch (ClientProtocolException e) { 
       responseString = e.toString(); 
       Log.e("UploadApp", "exception: " + responseString); 
      } catch (IOException e) { 
       responseString = e.toString(); 
       Log.e("UploadApp", "exception: " + responseString); 
      } 

      return responseString; 

     } 

     @Override 
     protected void onPostExecute(String result) { 
      Log.e(TAG, "Response from server: " + result); 

      // showing the server response in an alert dialog 
      showAlert(result); 

      super.onPostExecute(result); 
     } 

    } 

    /** 
    * Method to show alert dialog 
    * */ 
    private void showAlert(String message) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage(message).setTitle("Response from Servers") 
       .setCancelable(false) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // do nothing 
        } 
       }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 


} 
+0

Suche Antwort von "Paul Burke" in unter Stackoverflow Link; dies kann Ihr Problem lösen http://stackoverflow.com/questions/20067508/get-real-path-from-uri-android-kitkat-new-storage-access-framework –

+0

Warum? Was ist das Problem damit? –

+0

Weil ich keine Ahnung habe, wie man diese Funktionen in putExtra setzt Für die Übertragung in andere Aktivitäten –

Antwort

0

das Verwenden Pic von Galerie

Einführung Galerie Vorsatz und wählen Sie das Bild

Intent galleryIntent = new Intent(); 
galleryIntent.setType("image/*"); 
galleryIntent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE); 

Dann auf Aktivität Ergebnis

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (resultCode == RESULT_OK) { 
      if(requestCode==RESULT_LOAD_IMAGE){ 
       mFileUri=data.getData(); 
       launchUploadActivity2(true); 
      } 
     } 
} 

In launchUploadActivity2 (true)

String realPath=getPath(this, mFileUri) 
i.putExtra("filePath", realPath); 
+0

Danke Man ur Lösung auf gegebenem Link funktioniert..Aber dies woking explizit nicht wie eine modulare Funktion.Bedien Aufruf getImage Pfad nicht in Upload-Aktivität arbeiten .. Es ist Arbeit auf Es ist Arbeit auf Anfrage Code-Block.Haben Sie einen anderen Vorschlag zu Machen Sie es mit Upload-Aktivität Funktion funktionierend –

+1

Diese Antwort haben Problem in getPath() funtion –

+0

Welches Problem Sie konfrontiert sind? –