2014-12-06 67 views
0

我有一個代碼,從url獲取位圖,然後更改imageview,但我不知道爲什麼這不起作用..我嘗試了一些類似的答案,但圖像仍然沒有設置。如何在ImageView上設置位圖android android

這得到一個位圖。

class picture_get extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     URL img_value = null; 
     try { 
      img_value = new URL("https://graph.facebook.com/"+id+"picture?type=large"); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     try { 
      bitmap_pic = BitmapFactory.decodeStream(img_value.openConnection().getInputStream()); 
      Log.i("bitmap_pic_get", "ok"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     //bitmap_pic = Bitmap.createScaledBitmap(bitmap_pic, 50, 50, false); 
     return "Executed"; 
    } 
} 

而這個設定的ImageView

new picture_get().execute(); 

runOnUiThread(新的Runnable(){

@Override 
public void run() { 
    textView1.setText("Id: "+ id); 
    image1.setImageBitmap(bitmap_pic); 
} 

});

所有的代碼工作,但圖像仍然相同。

+0

你能具體談談你想做什麼? – sherb 2014-12-06 17:08:58

+1

很難說,但從我發佈的代碼來看,您在加載前設置圖像。你不應該在'AsyncTask'中重寫'onPostExecute',並從那裏調用'runOnUIThread(...)'? – haraldK 2014-12-06 17:16:07

+0

我試圖從url獲取圖片並將其設置在imageview上:) – devbgs 2014-12-06 17:24:14

回答

1

這應該工作

class picture_get extends AsyncTask<String, Bitmap, Bitmap> { 

    @Override 
    protected Bitmap doInBackground(String... params) { 
     URL img_value = null; 
     try { 
      img_value = new URL("https://graph.facebook.com/"+id+"picture?type=large"); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     try { 
      bitmap_pic = BitmapFactory.decodeStream(img_value.openConnection().getInputStream()); 
      Log.i("bitmap_pic_get", "ok"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     //bitmap_pic = Bitmap.createScaledBitmap(bitmap_pic, 50, 50, false); 
     return bitmap_pic ; 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap_pic) { 
    image1.setImageBitmap(bitmap_pic);  
    } 
} 
+0

非常感謝。 :) – devbgs 2014-12-06 17:26:40

0
class picture_get extends AsyncTask<String, Void, Bitmap> { 

@Override 
protected String doInBackground(String... params) { 
    URL img_value = null; 
    try { 
     img_value = new URL("https://graph.facebook.com/"+id+"picture?type=large"); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     bitmap_pic = BitmapFactory.decodeStream(img_value.openConnection().getInputStream()); 
     Log.i("bitmap_pic_get", "ok"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    //bitmap_pic = Bitmap.createScaledBitmap(bitmap_pic, 50, 50, false); 
    return bitmap_pic 
} 
@Override 
void onPostExecute(Bitmap result){ 

    image1.setImageBitmap(bitmap_pic); 
} 

}

2

我會建議在類實現一個接口,你控制ImageView的。 比從onPostExecute(BMP位圖) 稱之爲:

public class ImageDownloader 
{ 
public interface ImageDownload 
{ 
    void getImage(Bitmap bmp); 
} 

Connection conn; 
ImageDownload callBack; 

public ImageDownloader(ImageDownload cb) 
{ 
    conn = new Connection(); 
    this.callBack = cb; 
} 

public AsyncTask<String, Void, Bitmap> downloadFile(ObjectType objectType, int fileID, int width, 
                int height, int fitMode) 
{ 
    AsyncTask<String, Void, Bitmap> task = null; 
    String url = getURL(objectType,fileID,width,height,fitMode); 
    try 
    { 
      task = new Downloader().executeOnExecutor(
        AsyncTask.THREAD_POOL_EXECUTOR, url); 
    } 
    catch (Exception e) 
    { 
     callBack.getImage(null); 
    } 

    return task; 
} 

String getURL(ObjectType objectType, int fileID, int width, 
       int height, int fitMode) 
{ 
    String url = conn.URL + FUNCTION 
      + "?" + PARAM_OBJECT_TYPE + "=" + objectType.ObjectType() 
      + "&" + PARAM_FILE_ID + "=" + fileID 
      + "&" + PARAM_WIDTH + "=" + width 
      + "&" + PARAM_HEIGHT + "=" + height 
      + "&" + PARAM_FIT_MODE + "=" + fitMode; 

    return url; 
} 

private class Downloader extends AsyncTask<String, Void, Bitmap> 
{ 
    @Override 
    protected void onPostExecute(Bitmap b) 
    { 
     super.onPostExecute(b); 
     callBack.getImage(b); 
    } 

    @Override 
    protected Bitmap doInBackground(String... params) 
    { 
     //android.os.Debug.waitForDebugger(); 
     Bitmap bmp = null; 
     try 
     { 
      URL url = new URL(params[0]); 

      URLConnection conn = url.openConnection(); 

      conn.setReadTimeout(10000 /* milliseconds */); 
      conn.setConnectTimeout(15000 /* milliseconds */); 
      conn.setDoInput(true); 


      InputStream input = conn.getInputStream(); 
      bmp = BitmapFactory.decodeStream(input); 
     } catch (MalformedURLException e) { 

     } catch (IOException e) { 

     } 

     return bmp; 
    } 
} 

}

相關問題