您好,登錄后才能下訂單哦!
在前面都寫到用AsyncTask來獲取網絡中的圖片。其實利用消息機制也能獲取網絡中的圖片,而且本人感覺用消息機制還是挺簡單的。
消息機制的圖解:
下面就用看代碼來理解上面的圖片。
布局:activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="cn.edu.huse.handle.MainActivity" > <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/iv_image" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="getImage" android:text="獲取網絡圖片" android:layout_gravity="bottom|center" android:layout_marginBottom="20dp"/> </FrameLayout>
MainActivity.java
package cn.edu.huse.handle; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.ImageView; import android.widget.Toast; /** * @author Lenovo * */ public class MainActivity extends Activity { protected static final int LOAD_SUCCESS = 0; private static final int LOAD_ERROR = 1; private ImageView iv_image; private Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case LOAD_SUCCESS: //加載圖片成功 Bitmap bitmap = (Bitmap) msg.obj; //獲取消息里面的數據 iv_image.setImageBitmap(bitmap); break; case LOAD_ERROR: //加載失敗 Toast.makeText(MainActivity.this, "圖片加載失敗", 0).show(); break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv_image = (ImageView) findViewById(R.id.iv_image); } public void getImage(View v){ new Thread(new Runnable() { @Override public void run() { String path = "http://p2.so.qhimgs1.com/bdr/_240_/t01666725c7200ad5ae.jpg"; try { //1、獲取URL URL url = new URL(path); //2、得到連接對象 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //設置連接時長 conn.setConnectTimeout(5000); //設置請求方式 conn.setRequestMethod("GET"); //判斷是否響應成功 if(conn.getResponseCode() == 200){ //3、獲取輸入流 InputStream inputStream = conn.getInputStream(); //4、獲得圖片資源Bitmap Bitmap bitmap = BitmapFactory.decodeStream(inputStream); //消息對象 Message msg = new Message(); msg.what = LOAD_SUCCESS; //唯一標識 msg.obj = bitmap; //消失里面寫在的數據 mHandler.sendMessage(msg); //發送消失給Handle }else{ alertUses(); } } catch (Exception e) { e.printStackTrace(); alertUses(); } } }).start(); } /** * 土司提醒用戶,圖片加載失敗 */ public void alertUses(){ mHandler.sendEmptyMessage(LOAD_ERROR); } }
添加權限:
運行結果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。