2015-04-21 5 views
0

По какой-то причине, когда я пытаюсь загрузить URL-адрес, полученный из запроса GET на сервер, он не будет загружаться, но если я попытаюсь загрузить строку, она будет работать напрямую. Вот мой код:Picasso not loading image

new Thread(new Runnable() { 
     @Override public void run() { 
      try { 
       URL obj = new URL(url1 + overallid); 
       HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

       con.setRequestMethod("GET"); 

       con.addRequestProperty("User-Agent", "Mozilla/4.76"); 

       BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
       String inputLine; 
       StringBuffer response = new StringBuffer(); 

       while ((inputLine = in.readLine()) != null) { 
        response.append(inputLine); 
       } 
       in.close(); 
       System.out.println(response.toString().replaceAll("\\s", "")); 
       System.out.println("Set pic to: " + pic); 
       Picasso.with(LoginActivity.this).load(pic).into(image); 
       i++; 
       overallid++; 
      } catch (Exception ex) { 
       System.out.println(ex); 
      } 
     } 
    }).start(); 

Если я рис = ссылку Imgur прямо он работает, но если я хватаю его от GET не работает. Есть идеи?

Спасибо, Куинн (Fusion)

+0

Пикассо должен быть запущен из главного потока .. – Gero

+0

Я попытался это, но она по-прежнему не работает Леммы повторить, что и вернуться к вам! – Austin

+0

Попробуйте использовать обработчик (встроенный в основной поток), а затем используйте его для запуска picasso через Handler.post (Runnable) – Gero

ответ

1

Пикассо должен быть вызван из главного потока ... попробовать этот код:

Handler mainThreadHandler=new Handler(); 
new Thread(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      URL obj = new URL(url1 + overallid); 
      HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

      con.setRequestMethod("GET"); 

      con.addRequestProperty("User-Agent", "Mozilla/4.76"); 

      BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
      String inputLine; 
      StringBuffer response = new StringBuffer(); 

      while ((inputLine = in.readLine()) != null) { 
       response.append(inputLine); 
      } 
      in.close(); 
      System.out.println(response.toString().replaceAll("\\s", "")); 
      System.out.println("Set pic to: " + pic); 
      mainThreadHandler.post(new Runnable() { 
       @Override 
       public void run() { 
        Picasso.with(LoginActivity.this).load(pic).into(image); 
       } 
      }); 
      i++; 
      overallid++; 
     } catch (Exception ex) { 
      System.out.println(ex); 
     } 
    } 
}).start(); 
1

Вот пример для обработки растровых изображений загрузки.

BufferedInputStream inputStream = null; 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    try { 
     URL url = new URL("the image url to load"); 
     HttpURLConnection connection = (HttpURLConnection) url 
       .openConnection(); 

     inputStream = new BufferedInputStream(connection.getInputStream()); 

     byte[] buffer = new byte[8192]; 
     int n = -1; 
     while ((n = inputStream.read(buffer)) != -1) { 
      outputStream.write(buffer, 0, n); 
     } 

     final Bitmap bitmap = BitmapFactory.decodeByteArray(
       outputStream.toByteArray(), 0, outputStream.size()); 

     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       // TODO handle image here 
      } 
     }); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } finally { 
     if (inputStream != null) { 
      try { 
       inputStream.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     if (outputStream != null) { 
      try { 
       outputStream.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }