我是从画廊使用code。选择一个图片
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.gallery);
意图I =新的意图(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(ⅰ,SELECT_PICTURE);
}
公共无效onActivityResult(INT申请code,INT结果code,意图imageReturnedIntent){
点阵位图= NULL;
开关(要求code){
案例SELECT_PICTURE:
如果(结果code == RESULT_OK){
乌里selectedImage = imageReturnedIntent.getData();
尝试 {
位=去codeURI(selectedImage);
}赶上(FileNotFoundException异常E){
e.printStackTrace();
}
MyApplicationGlobal.bitmap =位图;
MyApplicationGlobal.imageUri = selectedImage.toString();
Log.v(selectedImage,selectedImage:+ selectedImage.getPath());
意图intentUpload =新的意图(GalleryActivity.this,UploadActivity.class);
startActivity(intentUpload);
完();
}
}
然后我试图通过调用Web服务来上传图片
MultipartEntity reqEntity =新MultipartEntity();
尝试 {
reqEntity.addPart(电子邮件,新StringBody(电子邮件));
Log.v(在uploadImageUsingMultiPart,的ImagePath:+ MyApplicationGlobal.imageUri);
reqEntity.addPart(名,新FileBody(新文件(MyApplicationGlobal.imageUri)));
reqEntity.addPart(img_desc,新StringBody(img_desc));
reqEntity.addPart(量,新StringBody(量));
reqEntity.addPart(request_type,新StringBody(插入));
}赶上(UnsupportedEncodingException E){
e.printStackTrace();
}
但我发现了错误 java.io.FileNotFoundException
登录猫
java.io.FileNotFoundException:/内容:/媒体/外部/图片/媒体/ 526(没有这样的文件或目录)
在org.apache.harmony.luni.platform.OSFileSystem.open(本机方法)
在dalvik.system.BlockGuard $ WrappedFileSystem.open(BlockGuard.java:239)
在java.io.FileInputStream中的< INIT>(FileInputStream.java:88)
在org.apache.http.entity.mime.content.FileBody.writeTo(FileBody.java:100)
在org.apache.http.entity.mime.HttpMultipart.doWriteTo(HttpMultipart.java:206)
在org.apache.http.entity.mime.HttpMultipart.writeTo(HttpMultipart.java:224)
在org.apache.http.entity.mime.MultipartEntity.writeTo(MultipartEntity.java:183)
在org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:97)
在org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:162)
在org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:272)
在org.apache.http.protocol.Htt prequestExecutor.doSendRequest(Htt的prequestExecutor.java:237)
在org.apache.http.protocol.Htt prequestExecutor.execute(Htt的prequestExecutor.java:119)
在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
在com.network.GetJSONFomURL.getJSONSrtringFromUrl(GetJSONFomURL.java:53)
在com.network.WebServices.uploadImageUsingMultiPart(WebServices.java:73)
在com.markphoto_activities.UploadActivity$MyAsyncTaskUploadImage.doInBackground(UploadActivity.java:127)
在com.markphoto_activities.UploadActivity $ MyAsyncTaskUploadImage.doInBackground(UploadActivity.java:1)
在android.os.AsyncTask $ 2.call(AsyncTask.java:252)
在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
在java.util.concurrent.FutureTask.run(FutureTask.java:137)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:574)
在java.lang.Thread.run(Thread.java:1020)
解决方案
调用这个方法,它传递selectedUri,作为回报,你会得到你想要的路径
公共字符串getPath(URI URI){
的String []投影= {MediaStore.Images.Media.DATA};
光标光标= managedQuery(URI,投影,NULL,NULL,NULL);
INT与Column_Index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
返回cursor.getString(Column_Index中);
}
I'm selecting a image from gallery using code
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery);
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, SELECT_PICTURE);
}
public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
Bitmap bitmap = null;
switch (requestCode) {
case SELECT_PICTURE:
if (resultCode == RESULT_OK) {
Uri selectedImage = imageReturnedIntent.getData();
try {
bitmap = decodeUri(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
MyApplicationGlobal.bitmap = bitmap;
MyApplicationGlobal.imageUri = selectedImage.toString();
Log.v("selectedImage", "selectedImage: " + selectedImage.getPath());
Intent intentUpload = new Intent(GalleryActivity.this, UploadActivity.class);
startActivity(intentUpload);
finish();
}
}
then I try to upload that image by calling web service
MultipartEntity reqEntity = new MultipartEntity();
try {
reqEntity.addPart("email", new StringBody(email));
Log.v("in uploadImageUsingMultiPart", "imagePath: " + MyApplicationGlobal.imageUri);
reqEntity.addPart("name", new FileBody(new File(MyApplicationGlobal.imageUri)));
reqEntity.addPart("img_desc", new StringBody(img_desc));
reqEntity.addPart("amount", new StringBody(amount));
reqEntity.addPart("request_type", new StringBody("INSERT"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
But I'm getting error java.io.FileNotFoundException
Log cat is
java.io.FileNotFoundException: /content:/media/external/images/media/526 (No such file or directory)
at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:239)
at java.io.FileInputStream.<init>(FileInputStream.java:88)
at org.apache.http.entity.mime.content.FileBody.writeTo(FileBody.java:100)
at org.apache.http.entity.mime.HttpMultipart.doWriteTo(HttpMultipart.java:206)
at org.apache.http.entity.mime.HttpMultipart.writeTo(HttpMultipart.java:224)
at org.apache.http.entity.mime.MultipartEntity.writeTo(MultipartEntity.java:183)
at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:97)
at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:162)
at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:272)
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:237)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:119)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at com.network.GetJSONFomURL.getJSONSrtringFromUrl(GetJSONFomURL.java:53)
at com.network.WebServices.uploadImageUsingMultiPart(WebServices.java:73)
at com.markphoto_activities.UploadActivity$MyAsyncTaskUploadImage.doInBackground(UploadActivity.java:127)
at com.markphoto_activities.UploadActivity$MyAsyncTaskUploadImage.doInBackground(UploadActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:252)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574)
at java.lang.Thread.run(Thread.java:1020)
解决方案
Call this method, pass it the selectedUri, in return you will get the path that you want
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}