2015-09-14 1 views
4

Я пытаюсь загрузить изображение на сервер из галереи и камеры. Когда я выбираю изображение из галереи в загружайте на сервер свою работу Perfactly. Но когда я выбираю камеру, захваченную изображение для загрузки на сервер. Сбой и отображение ошибки.java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String android.net.Uri.getScheme()'

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 

В OnActivityResult.

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == PICK_IMAGE && resultCode == RESULT_OK 
       && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 

      decodeFile(picturePath); 
      new ImageUploadTask().execute(); 
     }else { 

      Toast.makeText(getApplicationContext(), "User Canceled", 
        Toast.LENGTH_LONG).show(); 
     } 
    } 

я получил ошибку на этой линии в onActivityResult

Cursor cursor = getContentResolver().query(selectedImage, 
         filePathColumn, null, null, null); 
       cursor.moveToFirst(); 

метод я использовал для открытия камеры на кнопку мыши.

loadimage.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 


       AlertDialog.Builder builder = new AlertDialog.Builder(Add_Info.this); 
       builder.setMessage("Select Image From") 
         .setCancelable(true) 
         .setPositiveButton("Camera", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 

           Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
           startActivityForResult(intent, CAMERA_REQUEST); 
           mImageCaptureUri = Uri.fromFile(new File(Environment 
             .getExternalStorageDirectory(), "tmp_avatar_" 
             + String.valueOf(System.currentTimeMillis()) 
             + ".jpg")); 
          } 
         }) 
         .setNegativeButton("Gallery", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           Intent i = new Intent(
             Intent.ACTION_PICK, 
             android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

           startActivityForResult(i, RESULT_LOAD_IMAGE); 

          } 
         }); 
       AlertDialog alert = builder.create(); 
       alert.show(); 


      } 
     }); 

помочь мне решить эту problem.I не знаю, как т получить эту ошибку, даже после того, как я использовал уже в моем предыдущем проекте.

Заранее спасибо

+0

data.getData(); возвращается null – QAMAR

+0

вам следует опубликовать код 'PICK_IMAGE' не' CAMERA_REQUEST' –

+1

Просьба опубликовать всю трассировку стека и указать, какие строки в трассировке стека соответствуют строкам в ваших фрагментах кода. – CommonsWare

ответ

2

я имел такую ​​же проблему при работе с API камеры и Намерения onActivityResult, наконец, я узнал, что это зависит от вашего андроида версии устройства, в Android M (Зефир - 6.0-6.0.1) onActivityResult намерение состоит в том, как показано ниже:

requestCode : 230 resultCode : -1 intent :Intent{dat=file:///storage/emulated/0/Pictures/Rahnama/IMG_20160508_121332_1519065 564.jpg typ=image/jpeg } RESULT_OK : -1 

и андроид версии ниже, чем Зефир:

requestCode : 230 resultCode : -1 intent : Intent { dat=content://media/external/images/media/309 (has extras) } RESULT_OK : -1 

Я думаю, вы должны проверить андроид версию на ActivityResult и для андроид версии Зефир, чтобы получить прямой файл из пути в Ури и Intent:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M){ 
      final Uri data = intent.getData(); 
      final File file = new File(data.getPath()); 
      // now you can upload your image file 
    }else{ 
      // in android version lower than M your method must work 
    } 

Я надеюсь, что это может быть полезно для вас.

+0

Можете ли вы, пожалуйста, изучить этот ответ глубоко? –

0

Я также встречаюсь с этой проблемой, после многих тестов я нашел ее, потому что я установил атрибут с именем «android: windowIsTranslucent = true», если я удалю этот атрибут из стиля, он всегда работает. Надеюсь помочь вам.

0
if (null != account.getPhotoUrl()) { 
    // Write code here 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^