public void uploadpicture(View view)
{
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), SELECT_PICTURE);
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
if (requestCode == SELECT_PICTURE)
{
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
Toast.makeText(this,selectedImagePath,Toast.LENGTH_SHORT).show();
Log.i("selectedImagePath",selectedImagePath.trim());
}
}
}
我从Log-cat得到了这个:
05-24 15:57:51.054: E/AndroidRuntime(18016): FATAL EXCEPTION: main
05-24 15:57:51.054: E/AndroidRuntime(18016): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.sec.gallery3d.provider/picasa/item/5147009501910019474 }} to activity {ncpl.talentapp/ncpl.talentapp.SignUp}: java.lang.NullPointerException
05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread.deliverResults(ActivityThread.java:2821)
05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2864)
05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread.access$1000(ActivityThread.java:122)
05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1057)
05-24 15:57:51.054: E/AndroidRuntime(18016): at android.os.Handler.dispatchMessage(Handler.java:99)
05-24 15:57:51.054: E/AndroidRuntime(18016): at android.os.Looper.loop(Looper.java:132)
05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread.main(ActivityThread.java:4126)
05-24 15:57:51.054: E/AndroidRuntime(18016): at java.lang.reflect.Method.invokeNative(Native Method)
05-24 15:57:51.054: E/AndroidRuntime(18016): at java.lang.reflect.Method.invoke(Method.java:491)
05-24 15:57:51.054: E/AndroidRuntime(18016): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
05-24 15:57:51.054: E/AndroidRuntime(18016): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
05-24 15:57:51.054: E/AndroidRuntime(18016): at dalvik.system.NativeStart.main(Native Method)
05-24 15:57:51.054: E/AndroidRuntime(18016): Caused by: java.lang.NullPointerException
答案 0 :(得分:9)
从您的日志中看起来您正试图从Picasa文件夹dat=content://com.android.sec.gallery3d.provider/picasa/item/5147009501910019474
中选择一张图片,这些图片必须以不同的方式处理,因为MediaStore.Images.Media.DATA
列中的数据对于他们来说都是空的。
您可以在此链接中查看如何正确处理从Picasa中提取图片:
只有你还需要处理以“content://com.sec.android.gallery3d”开头的URI(我在三星S3上看到这一点)所以改变
if (selectedImage.toString().startsWith("content://com.google.android.gallery3d"))
到
if (_selectedImage.toString().startsWith("content://com.google.android.gallery3d")
|| selectedImage.toString().startsWith("content://com.sec.android.gallery3d"))
我不确定是否还有其他特殊情况(可能是)。
答案 1 :(得分:5)
我遇到了同样的问题,并尝试根据推荐的网站user1682516实施此问题。因为我的Picasa内容网址并不完全匹配,所以我正撞在墙上:我看起来像“com.sec.android.gallery3d.provider”而不是“com.android.gallery3d.provider”但似乎没有是否我改变了网址。
当我最终意识到我用来在我的应用程序https://github.com/nostra13/Android-Universal-Image-Loader中为ImageViews加载远程图像的库时,我感到愚蠢,为我处理这个问题。我可以使用适当的参数调用ImageLoader.getInstance()。loadImage()并在回调中获取一个Bitmap。我不需要担心它是本地图像,远程Picasa图像还是普通的远程图像 - 这是我照顾的。希望我几个小时前就已经想到了!
答案 2 :(得分:-2)
此处经过测试的代码
public class SelectPhotoActivity extends Activity {
private static final int SELECT_PICTURE = 1;
private String selectedImagePath="";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(intent, SELECT_PICTURE);
}
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);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE)
{
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
// here you can set the image
}
}
}
}