如何从gallery中选择的图像获取图像uri安卓5.0.2?

mitkmikd  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(310)

我是新来安卓的。请给我一些帮助。我需要图像uri,在此之前我尝试了data.getdata();并将其传递给getcontentresolver().query()但是data.getdata();始终返回空错误位于以下行:
uri selectedimageuri=getimageuri(getapplicationcontext(),selectedimage);返回uri.parse(路径);
我的android版本是5.0.2

  1. 05-10 01:55:10.712 24424-24424/com.donateblood.blooddonation E/AndroidRuntime: FATAL EXCEPTION: main
  2. Process: com.donateblood.blooddonation, PID: 24424
  3. java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=com.htc.HTCAlbum.action.ITEM_PICKER_FROM_COLLECTIONS (has extras) }} to activity {com.donateblood.blooddonation/com.donateblood.blooddonation.UploadImage}: java.lang.NullPointerException: uriString
  4. at android.app.ActivityThread.deliverResults(ActivityThread.java:3881)
  5. at android.app.ActivityThread.handleSendResult(ActivityThread.java:3931)
  6. at android.app.ActivityThread.access$1300(ActivityThread.java:144)
  7. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1408)
  8. at android.os.Handler.dispatchMessage(Handler.java:102)
  9. at android.os.Looper.loop(Looper.java:155)
  10. at android.app.ActivityThread.main(ActivityThread.java:5696)
  11. at java.lang.reflect.Method.invoke(Native Method)
  12. at java.lang.reflect.Method.invoke(Method.java:372)
  13. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
  14. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
  15. Caused by: java.lang.NullPointerException: uriString
  16. at android.net.Uri$StringUri.<init>(Uri.java:473)
  17. at android.net.Uri$StringUri.<init>(Uri.java:463)
  18. at android.net.Uri.parse(Uri.java:435)
  19. at com.donateblood.blooddonation.UploadImage.getImageUri(UploadImage.java:156)
  20. at com.donateblood.blooddonation.UploadImage.onActivityResult(UploadImage.java:102)
  21. at android.app.Activity.dispatchActivityResult(Activity.java:6160)
  22. at android.app.ActivityThread.deliverResults(ActivityThread.java:3877)
  23. at android.app.ActivityThread.handleSendResult(ActivityThread.java:3931)
  24. at android.app.ActivityThread.access$1300(ActivityThread.java:144)
  25. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1408)
  26. at android.os.Handler.dispatchMessage(Handler.java:102)
  27. at android.os.Looper.loop(Looper.java:155)
  28. at android.app.ActivityThread.main(ActivityThread.java:5696)
  29. at java.lang.reflect.Method.invoke(Native Method)
  30. at java.lang.reflect.Method.invoke(Method.java:372)
  31. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
  32. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
  1. package com.donateblood.blooddonation;
  2. import android.app.ProgressDialog;
  3. import android.content.ActivityNotFoundException;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.database.Cursor;
  7. import android.graphics.Bitmap;
  8. import android.graphics.BitmapFactory;
  9. import android.graphics.Canvas;
  10. import android.graphics.Path;
  11. import android.graphics.Rect;
  12. import android.net.Uri;
  13. import android.os.AsyncTask;
  14. import android.os.Bundle;
  15. import android.provider.MediaStore;
  16. import android.support.v7.app.AppCompatActivity;
  17. import android.util.Base64;
  18. import android.util.Log;
  19. import android.view.View;
  20. import android.widget.Button;
  21. import android.widget.EditText;
  22. import android.widget.ImageView;
  23. import android.widget.Spinner;
  24. import android.widget.TextView;
  25. import android.widget.Toast;
  26. import com.mongodb.DB;
  27. import com.mongodb.gridfs.GridFS;
  28. import com.mongodb.gridfs.GridFSInputFile;
  29. import java.io.ByteArrayOutputStream;
  30. import java.io.File;
  31. import java.io.FileInputStream;
  32. import java.io.FileNotFoundException;
  33. import java.io.IOException;
  34. import butterknife.ButterKnife;
  35. import butterknife.InjectView;
  36. /**
  37. * Created by YouCaf Iqbal on 4/26/2016.
  38. */
  39. public class UploadImage extends AppCompatActivity {
  40. public static final int RESULT_LOAD = 1;
  41. @InjectView(R.id.imageView) ImageView ImageUpload;
  42. @InjectView(R.id.upload) Button Btn_Upload;
  43. @InjectView(R.id.proceed) Button Btn_Proceed;
  44. public String bloodgroup,name,password,number,email,picturePath,encodedPhotoString;
  45. Database dbobj = new Database();
  46. GPSTracker gps; private DB db;
  47. public double latitude=0;
  48. public double longitude=0;
  49. @Override
  50. protected void onCreate(Bundle savedInstanceState) {
  51. super.onCreate(savedInstanceState);
  52. setContentView(R.layout.uploadimage);
  53. ButterKnife.inject(this);
  54. getCurrentLatLong();
  55. Btn_Upload.setOnClickListener(new View.OnClickListener() {
  56. @Override
  57. public void onClick(View v) {
  58. try{
  59. Intent upload = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  60. //Adding Croping
  61. upload.putExtra("crop","true");
  62. upload.putExtra("aspectX",1);
  63. upload.putExtra("aspectY",1);
  64. upload.putExtra("outputX",300);
  65. upload.putExtra("outputY",300);
  66. upload.putExtra("return-data",true);
  67. startActivityForResult(upload,RESULT_LOAD);
  68. } catch (ActivityNotFoundException E) {
  69. String errorMessage = "Your device doesn't support the crop action!";
  70. Toast toast = Toast.makeText(UploadImage.this, errorMessage, Toast.LENGTH_SHORT);
  71. toast.show();
  72. }
  73. }
  74. });
  75. Btn_Proceed.setOnClickListener(new View.OnClickListener() {
  76. @Override
  77. public void onClick(View v) {
  78. Prcoess();
  79. }
  80. });
  81. }
  82. // When image is selected from Gallery
  83. @Override
  84. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  85. super.onActivityResult(requestCode, resultCode, data);
  86. if(requestCode==RESULT_LOAD && resultCode==RESULT_OK && data!=null){
  87. Bundle extras = data.getExtras();
  88. //Uri SelectedImageURI = (Uri)extras.get(Intent.EXTRA_STREAM);
  89. Bitmap SelectedImage = extras.getParcelable("data");
  90. //Make Image rounded
  91. //Bitmap RoundedImage = getRoundedShape(SelectedImage);
  92. // Uri SelectedImageURI = data.getData();
  93. Uri SelectedImageURI = getImageUri(getApplicationContext(), SelectedImage);
  94. picturePath = getRealPathFromURI(SelectedImageURI);
  95. ImageUpload.setImageBitmap(SelectedImage);
  96. // retrieve image path
  97. String[] projection = {MediaStore.Images.Media.DATA};
  98. try {
  99. // Cursor cursor = getContentResolver().query(SelectedImageURI, projection, null, null, null);
  100. //cursor.moveToFirst();
  101. // int columnIndex = cursor.getColumnIndex(projection[0]);
  102. // picturePath = cursor.getString(columnIndex);
  103. // cursor.close();
  104. ////////////////////////////////////////////////////
  105. String fileNameSegments[] = picturePath.split("/");
  106. String fileName = fileNameSegments[fileNameSegments.length - 1];
  107. try {
  108. File f = new File(picturePath);
  109. Bitmap myImg = decodeFile(f,720);
  110. //myImg = getResizedBitmap(myImg,100); // Compress it
  111. // Bitmap myImg = BitmapFactory.decodeFile(picturePath);
  112. ByteArrayOutputStream stream = new ByteArrayOutputStream();
  113. // Must compress the Image to reduce image size to make upload easy
  114. // myImg = getResizedBitmap(myImg, 720);
  115. myImg.compress(Bitmap.CompressFormat.JPEG, 50, stream);
  116. byte[] byte_arr = stream.toByteArray();
  117. // Encode Image to String
  118. encodedPhotoString = Base64.encodeToString(byte_arr, 0);
  119. // ImageUpload.setImageBitmap(myImg);
  120. }catch (Exception e){
  121. Toast.makeText(UploadImage.this,"Unable to Set Image Try Again",Toast.LENGTH_SHORT).show();
  122. }
  123. //Log.d("Picture Path", picturePath);
  124. // Toast.makeText(getBaseContext(), ""+picturePath+"", Toast.LENGTH_LONG).show();
  125. }
  126. catch(Exception e) {
  127. // Log.e("Path Error", e.toString());
  128. Toast.makeText(getBaseContext(), "Error finding path", Toast.LENGTH_LONG).show();
  129. e.printStackTrace();
  130. }
  131. //
  132. }
  133. }
  134. public void Prcoess(){
  135. dbAsync signupThread = new dbAsync();
  136. signupThread.execute();
  137. }
  138. public Uri getImageUri(Context inContext, Bitmap inImage) {
  139. ByteArrayOutputStream bytes = new ByteArrayOutputStream();
  140. inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
  141. String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
  142. return Uri.parse(path);
  143. }
  144. public String getRealPathFromURI(Uri uri) {
  145. Cursor cursor = getContentResolver().query(uri, null, null, null, null);
  146. cursor.moveToFirst();
  147. int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
  148. return cursor.getString(idx);
  149. }
  150. public class dbAsync extends AsyncTask<Void,Void,Void> {
  151. private ProgressDialog pDialog;
  152. @Override
  153. protected void onPreExecute() {
  154. super.onPreExecute();
  155. pDialog = new ProgressDialog(UploadImage.this);
  156. pDialog.setMessage("Creating Account...");
  157. pDialog.setIndeterminate(false);
  158. pDialog.setCancelable(true);
  159. pDialog.show();
  160. }
  161. @Override
  162. protected Void doInBackground(Void... voids) {
  163. GetUserDetails();
  164. dbobj.insertUser(name,email,password,number,bloodgroup,latitude,longitude,encodedPhotoString);
  165. return null;
  166. }
  167. @Override
  168. protected void onPostExecute(Void aVoid) {
  169. super.onPostExecute(aVoid);
  170. pDialog.dismiss();
  171. Toast.makeText(getBaseContext(), "Created Successfully", Toast.LENGTH_LONG).show();
  172. // Toast.makeText(getBaseContext(), ""+encodedPhotoString+"", Toast.LENGTH_LONG).show();
  173. onSignupSuccess();
  174. }
  175. }
  176. public void onSignupSuccess() {
  177. // btn_signup.setEnabled(true);
  178. //setResult(RESULT_OK, null);
  179. Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
  180. startActivity(intent);
  181. finish();
  182. }
  183. public void GetUserDetails(){
  184. //mySpinner=(Spinner) findViewById(R.id.spinner);
  185. bloodgroup = SignupActivity.bloodgroup.toString();
  186. name = SignupActivity.name.toString();
  187. email = SignupActivity.email.toString();
  188. password = SignupActivity.password.toString();
  189. number = SignupActivity.number.toString();
  190. }
  191. public void getCurrentLatLong(){
  192. gps = new GPSTracker(UploadImage.this);
  193. if (gps.canGetLocation()) {
  194. latitude = gps.getLatitude();
  195. longitude = gps.getLongitude();
  196. }
  197. }
  198. public Bitmap decodeFile(File f,int IMAGE_MAX_SIZE){
  199. Bitmap b = null;
  200. //Decode image size
  201. BitmapFactory.Options o = new BitmapFactory.Options();
  202. o.inJustDecodeBounds = true;
  203. FileInputStream fis = null;
  204. try {
  205. fis = new FileInputStream(f);
  206. } catch (FileNotFoundException e) {
  207. e.printStackTrace();
  208. }
  209. BitmapFactory.decodeStream(fis, null, o);
  210. try {
  211. fis.close();
  212. int scale = 1;
  213. if (o.outHeight > IMAGE_MAX_SIZE || o.outWidth > IMAGE_MAX_SIZE) {
  214. scale = (int) Math.pow(2, (int) Math.ceil(Math.log(IMAGE_MAX_SIZE /
  215. (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)));
  216. }
  217. //Decode with inSampleSize
  218. BitmapFactory.Options o2 = new BitmapFactory.Options();
  219. o2.inSampleSize = scale;
  220. fis = new FileInputStream(f);
  221. b = BitmapFactory.decodeStream(fis, null, o2);
  222. fis.close();
  223. }catch (IOException e) {
  224. e.printStackTrace();
  225. }
  226. return b;
  227. }
  228. }
g2ieeal7

g2ieeal71#

ACTION_PICK 将结果返回到 UriIntent 交付至 onActivityResult() . 你打电话来 getData() 为了得到这个 Uri . 就这样。因此,你生活中的一切 if(requestCode==RESULT_LOAD && resultCode==RESULT_OK && data!=null) 阻塞不仅是错误的,而且是无用的。
除此之外,摆脱所有未记录的临时演员,你放在那
ACTION_PICK Intent . 使用图像裁剪库。

相关问题