Вопрос по android, image – Выберите картинку Намерение вызывает исключение нулевого указателя

4
 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
пожалуйста, покажите logcat C. Leung
что такое журнал сбоев? Adil Soomro

Ваш Ответ

3   ответа
-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
            }
    }
}

}
Error: User Rate Limit ExceededarguablyError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Vijaya
Error: User Rate Limit Exceeded Vijaya
5

Я столкнулся с этой же проблемой и попытался реализовать ее на основе рекомендованного веб-сайта user1682516. Я бился головой о стену, потому что мои URL-адреса содержимого Picasa не совпадали: мои выглядели как & quot; com.sec.android.gallery3d.provider & quot; а не & quot; com.android.gallery3d.provider & quot; но, похоже, не сработало, изменил ли я URL или нет.

Затем я почувствовал глупость, когда в конце концов понял, что библиотека, которую я использую для загрузки удаленных изображений для ImageViews в моем приложении,https://github.com/nostra13/Android-Universal-Image-LoaderЗаботится об этом для меня. Я могу просто вызвать ImageLoader.getInstance (). LoadImage () с соответствующими параметрами и получить растровое изображение в обратном вызове. Мне не нужно беспокоиться о том, является ли это локальным изображением, удаленным изображением Picasa или обычным удаленным изображением - которое позаботилось обо мне. Жаль, что я понял это несколько часов назад!

9

Похоже, что из вашего журнала вы пытаетесь выбрать изображение из папки Picasadat=content://com.android.sec.gallery3d.provider/picasa/item/5147009501910019474, и они должны обрабатываться по-разному, потому что данные вMediaStore.Images.Media.DATA для них столбец будет нулевым. Вы можете посмотреть, как правильно выбирать изображения из Picasa, по этой ссылке:

http://dimitar.me/how-to-get-picasa-images-using-the-image-picker-on-android-devices-running-any-os-version/

Только вам также нужно обрабатывать URI, которые начинаются с & quot; content: //com.sec.android.gallery3d" (Я вижу это на Samsung 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"))

Я не уверен, есть ли еще какие-либо особые случаи (вероятно, да).

Похожие вопросы