2017-02-11 14 views
-1

Я пытаюсь получить Путь из изображения, чтобы отправить его позже на сервер. Проблема заключается в том, когда я пытаюсь получить его, мой код не работает (вы будете видеть, что есть дополнительный } Это происходит потому, что код из OnCreate заканчивается, и затем я Worte других функций.):Получить uri с изображения в Android

enviar.setOnClickListener(new View.OnClickListener() { 
      String datos=""; 
      //Bundle extras=getIntent().getExtras(); 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
       intent.setType("image/*"); 
       startActivityForResult(intent, 0); 
       //Uri imagen=intent.getData(); 
       //datos=imagen.getPath(); 
       //mostrar.setText(datos); 
      } 
     }); 
    } 

    private String getRealPathFromURI(Uri contentURI) { 
     String result; 
     Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 
     if (cursor == null) { 
      result = contentURI.getPath(); 
     } else { 
      cursor.moveToFirst(); 
      int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
      result = cursor.getString(idx); 
      cursor.close(); 
     } 
     return result; 
    } 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

     switch(requestCode) { 
      case 0: 
       if(resultCode == this.RESULT_OK){ 
        try { 
         final Uri imageUri = imageReturnedIntent.getData(); 
         String path = getRealPathFromURI(imageUri); 
         mostrar.setText(path); 
        } 
        catch (Exception e) { 
         Log.e("Erroreeeee: ", e.getMessage()); 
        } 
       } 
       break; 
     } 
    } 
+0

Вы пытались сделать интернет с startActivityForResult как ключевое слово? Первая ссылка говорит точно, что вы должны делать. И нет, результаты не сразу после того, как вы его назовете. – Selvin

ответ

0

У вас две проблемы.

Первый, что startActivityForResult() не является непосредственным. У вас нет результатов в следующем заявлении.

Таким образом, вы можете позвонить startActivityForResult(), как я в this sample app:

private void get() { 
    Intent i= 
     new Intent() 
     .setType("image/png") 
     .setAction(Intent.ACTION_GET_CONTENT) 
     .addCategory(Intent.CATEGORY_OPENABLE); 

    startActivityForResult(i, REQUEST_GET); 
} 

Ваши результаты доставляются onActivityResult():

@Override 
    public void onActivityResult(int requestCode, int resultCode, 
           Intent resultData) { 
    if (resultCode==Activity.RESULT_OK) { 
     Uri image=resultData.getData(); 
     // do something 
    } 
    } 

Ваша вторая проблема заключается в том, что вы думаете, что вы выбирают файл. Ты не. Вы выбираете часть контента, используя любую деятельность, которую пользователь решает иметь дескриптор ACTION_GET_CONTENT. getPath() имеет смысл только в том случае, если схема Uri равна file, и это маловероятно. Нет надежных средств для получения пути файловой системы для произвольного Uri по той простой причине, что Uri не должен указывать на файл.

В идеале логика «загрузить на сервер» может работать с InputStream. В этом случае позвоните по номеру openInputStream() по телефону ContentResolver, чтобы получить InputStream по содержанию, указанному Uri. Если ваша логика «загрузить на сервер» работает только с файлами, используйте ее InputStream, чтобы скопировать содержимое в некоторый временный файл, который вы управляете (например, в getCacheDir()), а затем используйте этот временный файл для своей загрузки. Удалите временный файл, когда вы закончите с ним.

+0

Конечно, я не думаю, что я собираю файл. Я просто хочу, чтобы путь позже сообщил телефону «отправьте это изображение на сервер» –

+0

Очень забавно :-). – greenapps

+0

@ F.Riggio: «Конечно, я не думаю, что я собираю файл» - тогда почему вы говорите с точки зрения путей? Предположим, что у вас есть 'Uri'' http: // stackoverflow.com/questions/42181319/get-uri-from-image-in-android/42181636', и вы решили, что хотите отправить контент, идентифицированный этим 'Uri' на сервер. Считаете ли вы, что '/ questions/42181319/get-uri-from-image-in-android/42181636' (результат' getPath() 'на этом' Uri') - это то, что вы можете использовать? – CommonsWare