2016-10-01 15 views
0

У меня есть метод, где Url опрашивается из моей базы данных и посланный как дополнительное перед открытием деятельности, где вы можете изменить масштаб изображения, панорамирование и т.д.Невозможно установить URL в SubsamplingScaleImageView URI

topLevelMessageImage.setOnClickListener(v -> { 

        ParseQuery<ParseObject> imageQuery = new ParseQuery<>(ParseConstants.CLASS_YEET); 
        imageQuery.whereEqualTo(ParseConstants.KEY_OBJECT_ID, topLevelCommentObject.getObjectId()); 
        imageQuery.findInBackground((user, e2) -> { 
         if (e2 == null) for (ParseObject userObject : user) { 

          if (userObject.getParseFile("image") != null) { 
           String imageURL = userObject.getParseFile("image").getUrl(); 
           Log.w(getClass().toString(), imageURL); 

           // Asynchronously display the message image downloaded from Parse 
           if (imageURL != null) { 

            Intent intent = new Intent(getApplicationContext(), MediaPreviewActivity.class); 
            intent.putExtra("imageUrl", imageURL); 
            this.startActivity(intent); 

           } 

          } 
         } 
        }); 
       }); 

Когда начинается деятельность , я получаю следующее исключение :

10-01 20:46:08.202 16149-16460/com.yitter.android E/SubsamplingScaleImageView: Failed to initialise bitmap decoder 


java.io.FileNotFoundException: No content provider: https://parsefiles.back4app.com/GDprTC66bNMp3mXWNvWJbZhWwjedoucvp6NlNKVl/03a8e1618392395811c9830333c0443f_6cf1e0ef-47af-4ddc-88cc-196debd77a9a.jpeg 
                        at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1090) 
                        at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:942) 
                        at android.content.ContentResolver.openInputStream(ContentResolver.java:662) 
                        at com.davemorrissey.labs.subscaleview.decoder.SkiaImageRegionDecoder.init(SkiaImageRegionDecoder.java:67) 
                        at com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView$TilesInitTask.doInBackground(SubsamplingScaleImageView.java:1415) 
                        at com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView$TilesInitTask.doInBackground(SubsamplingScaleImageView.java:1391) 
                        at android.os.AsyncTask$2.call(AsyncTask.java:295) 
                        at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                        at java.lang.Thread.run(Thread.java:818) 

Я предполагаю, что я не могу просто кормить SubsamplingScaleImageView URL, а? Думаю, я тоже не могу использовать Пикассо? Что мне делать вместо этого?

private void locateImageView() { 

Bundle bundle = getIntent().getExtras(); 
if (bundle != null) { 
    if (bundle.getString("imageUrl") != null) { 
     String imageUrl = bundle.getString("imageUrl"); 
     Log.w(getClass().toString(), imageUrl); 

     imageView = (SubsamplingScaleImageView) findViewById(R.id.image); 

     URL url = new URL(imageUrl); 
     URI uri = url.toURI(); 

     imageView.setImage(ImageSource.uri(String.valueOf(uri))); 

     /*Picasso.with(getApplicationContext()) 
       .load(imageUrl) 
       .placeholder(R.color.placeholderblue) 
       .memoryPolicy(MemoryPolicy.NO_CACHE).into(((SubsamplingScaleImageView) findViewById(R.id.image)));*/ 
    } 
} 

Я попробовал это, и она работала ...

try { 
        URL url = new URL(imageUrl); 
        HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
        connection.setDoInput(true); 
        connection.connect(); 
        InputStream input = connection.getInputStream(); 
        Bitmap myBitmap = BitmapFactory.decodeStream(input); 

        imageView.setImage(ImageSource.bitmap(myBitmap); 

       } catch (IOException e) { 
        // Log exception 
        Log.w(getClass().toString(), e); 
       } 

ответ

1

Я предполагаю, что я не могу просто кормить SubsamplingScaleImageView URL, а?

Он не может обрабатывать http/https URL-адреса, если это то, что вы имеете в виду.

Я думаю, что я не могу использовать Пикассо?

Не совсем. Его роль заключается в загрузке полного растрового изображения, которое не то, что вы хотите.

Что мне делать вместо этого?

Загрузите изображение самостоятельно, используя ваш любимый API-интерфейс HTTP-клиента (HttpUrlConnection, OkHttp и т. Д.) В файл. Затем загрузите файл в SubsamplingScaleImageView.

+0

Ярмарка достаточно. Можете ли вы объяснить последний бит, как в синтаксисе для загрузки файла. Это imageView.setImage (ImageSource.File (???); Что-то вроде этого? – santafebound

+0

@santafebound: Ваш существующий код должен быть точным, если значение, которое вы передаете в 'uri()', - это URL с файлом : /// 'schem. Самый простой способ получить это:' Uri.fromFile (...). toString() ', где' ... '- это объект' File', представляющий вашу загрузку. – CommonsWare

+0

Спасибо за совет – santafebound

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

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