2017-03-03 185 views
0

我想從我從一個Volley JSONObjectRequest獲取的URL加載圖像。從Android中加載圖像從URL

這是我的JSON請求:

//creates the post request and posts 
    JsonObjectRequest getRandomImageURL = new JsonObjectRequest(Request.Method.POST, url_image,null, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 

        Log.d("ServerResponse","ATM ImageURL"+response.toString()); 
        try { 
         String image = response.getString("Image"); 
         Log.d("Image","ImageURL "+imgLink+image); 



         imgAd = (ImageView) findViewById(R.id.imgAd); 
         String imgURL = imgLink+image; 
         new DownloadImageTask(imgAd).execute(imgURL); 




        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 


       } 

      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // error 
        Log.d("Error.Response","Error"+ error.getLocalizedMessage()); 


       } 
      } 
    ) { 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<>(); 
      headers.put("Content-type", "application/json"); 
      headers.put("Accept", "application/json"); 
      headers.put("User-Agent", "Mozilla/5.0"); 
      headers.put("Content-length", dataStream.toString()); 
      return headers; 
     } 
     @Override 
     public byte[] getBody() { 
      try { 
       return mRequestBody == null ? null : mRequestBody.getBytes("utf-8"); 
      } catch (UnsupportedEncodingException uee) { 
       VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8"); 
       return null; 
      } 
     } 
    }; 
    Volley.newRequestQueue(this).add(getRandomImageURL); 
} 

這是我用從URL加載圖像:

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    ImageView bmImage; 

    public DownloadImageTask(ImageView bmImage) { 
     this.bmImage = bmImage; 
    } 

    protected Bitmap doInBackground(String... urls) { 
     String urldisplay = urls[0]; 
     Bitmap mIcon11 = null; 
     try { 
      InputStream in = new java.net.URL(urldisplay).openStream(); 
      mIcon11 = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return mIcon11; 
    } 

    protected void onPostExecute(Bitmap result) { 
     bmImage.setImageBitmap(result); 
    } 
} 

我不斷收到以下異常:

W/System.err: java.io.FileNotFoundException: https://www.lamdacardservices.com/offers/CINEMA Logo.jpg 
W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:197) 
W/System.err:  at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 
W/System.err:  at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25) 
W/System.err:  at java.net.URL.openStream(URL.java:470) 
W/System.err:  at com.example.epavlos.lamda.map_activities.AtmMapActivity$DownloadImageTask$override.doInBackground(AtmMapActivity.java:327) 
W/System.err:  at com.example.epavlos.lamda.map_activities.AtmMapActivity$DownloadImageTask$override.access$dispatch(AtmMapActivity.java) 
W/System.err:  at com.example.epavlos.lamda.map_activities.AtmMapActivity$DownloadImageTask.doInBackground(AtmMapActivity.java:0) 
W/System.err:  at com.example.epavlos.lamda.map_activities.AtmMapActivity$DownloadImageTask.doInBackground(AtmMapActivity.java:317) 
W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
W/System.err:  at java.lang.Thread.run(Thread.java:818) 

任何人都可以幫我對我做錯了什麼?或者即使有更簡單的方法來實現這一點,也許使用排球或其他東西?

回答

1

取代你的空間試試這個:

String temp = "https://www.lamdacardservices.com/offers/CINEMA Logo.jpg"; 
    temp = temp.replaceAll(" ", "%20"); 
    URL sourceUrl = new URL(temp); 
-1

您也可以選擇使用ImageLoader的一個強大的圖像加載和緩存工具。

搖籃依賴性:

編譯 'com.nostra13.universalimageloader:通用圖像加載器:1.9.5'

要使用:

ImageLoader的ImageLoader的= ImageLoader.getInstance(); //獲取單例實例

imageLoader.displayImage(imageUri,imageView);

來源: https://github.com/nostra13/Android-Universal-Image-Loader

+0

他想下載圖像的紈絝子弟。 –

+0

是的,他正在下載,但實際上是在ImageView中渲染下載的圖像。 bmImage.setImageBitmap(結果); – owlein

0

你應該URL編碼,將處理這樣的問題。一種方法是

Uri.encode("https://www.lamdacardservices.com/offers/CINEMA Logo.jpg")