網路請求圖片
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif;">注意請求時,需要新增許可權,INTERNET</span>
public void click(View v) {
String path = "需要請求的網路地址";
//傳送http請求
try {
//建立一個url物件
URL url = new URL(path);
//獲得要請求的物件
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
//設定一些屬性
//設定請求方式,注意大寫
huc.setRequestMethod("GET");
//設定請求超時
huc.setConnectTimeout(8000);
//設定讀取超時
huc.setReadTimeout(8000);
//傳送連結
huc.connect();
//code 200,就代表請求成功
if (huc.getResponseCode()==200) {
//獲取伺服器返回的流,流就是從伺服器取到的資料
InputStream is = huc.getInputStream();
//把下載的資料整成一個圖片
//讀取的流必須就是一張圖片,是文字,會報錯
Bitmap bp = BitmapFactory.decodeStream(is);
//把圖片放到imageview中
ImageView ig = (ImageView) findViewById(R.id.im);
ig.setImageBitmap(bp);
}else{
Toast.makeText(this, "error", 0).show();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
注意,網路請求不能寫在主執行緒,此程式在4.3模擬器會報警告,無輸出結果。
主執行緒阻塞,使用者的所有操作,都會停止響應
ANR異常:應用無響應,主執行緒阻塞時間太長
注意,只有主執行緒才能重新整理UI,用訊息佇列,可以讓子執行緒重新整理UI
訊息佇列:主執行緒建立時,自動生成兩個:1messagequeen 訊息佇列,用來存放訊息 2Looper 不停地檢測訊息佇列中是否有訊息
為了使用訊息佇列,我們要建立一個Handler物件(處理器),即訊息處理器,專門用來處理訊息,重新整理子執行緒。 Looper如果發現有訊息,就會把訊息交給handeler處理。
有訊息,handler會生成一個handelermessage方法(處理訊息)。子執行緒想重新整理UI,獲得handler物件,在messagequeen中放一個訊息(用sendmessage方法)。
public class MainActivity extends Activity {
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
ImageView img = (ImageView) findViewById(R.id.img);
img.setImageBitmap((Bitmap) msg.obj);
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click() {
Thread t = new Thread(){
public void run() {
//請求個圖
String path = "";
try {
//轉換成url
URL url = new URL(path);
//獲取要請求的物件
HttpURLConnection hucn = (HttpURLConnection) url.openConnection();
//設定一些屬性
hucn.setRequestMethod("GET");
hucn.setReadTimeout(8000);
hucn.setConnectTimeout(8000);
hucn.connect();
if (hucn.getResponseCode()==200) {
InputStream is = hucn.getInputStream();
//把下載的資料整成一個圖片
Bitmap bp = BitmapFactory.decodeStream(is);
//重新整理ui工作在主執行緒中的handelermessage中完成,在此通知
Message msg = new Message();
handler.sendMessage(msg);
msg.obj = bp;
// ImageView img = (ImageView) findViewById(R.id.img);
// img.setImageBitmap(bp);
} else {
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
};
t.start();
}
相關文章
- 網路請求(一般請求,上傳圖片,上傳視訊)
- 利用網路請求將網路圖片轉換成Bitmap格式
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- Android網路請求(3) 網路請求框架OkHttpAndroid框架HTTP
- Android網路請求(4) 網路請求框架VolleyAndroid框架
- 網路請求了
- 網路請求優化之取消請求優化
- HTTP網路請求原理HTTP
- iOS原生網路請求iOS
- 網路請求LCNetwork
- 網路資料請求
- Android okHttp網路請求之Get/Post請求AndroidHTTP
- Volley 原始碼解析之圖片請求原始碼
- http.Post 請求 返回一個圖片HTTP
- Jest中Mock網路請求Mock
- OC:封裝網路請求封裝
- iOS 使用Moya網路請求iOS
- Android網路請求(2)Android
- RxJava + Retrofit完成網路請求RxJava
- iOS網路請求穿值iOS
- 網路請求框架對比框架
- Android Http請求框架二:xUtils 框架網路請求AndroidHTTP框架
- Flutter 網路請求框架封裝Flutter框架封裝
- OKHttp網路請求原理流程解析HTTP
- 小程式系列之網路請求
- 小程式-網路請求封裝封裝
- Flutter 網路請求 Dio 封裝Flutter封裝
- 網路請求發展介紹
- Retrofit網路請求原始碼解析原始碼
- 使用retrofit進行網路請求
- Vue 入門之網路請求Vue
- 淺談前端與網路請求前端
- BitmapFactory 解析網路請求的inputstream
- swift 網路請求Alamofire的使用Swift
- Android 網路請求詳解Android
- swift網路資料請求方法Swift
- iOS網路請求之上傳圖片:從示例到原始碼--以上傳回撥圖片為例 (AFNetworking、HYBNetworking、XMNetworking)iOS原始碼
- iOS網路請求之上傳圖片:從示例到原始碼–以上傳回撥圖片為例 (AFNetworking、HYBNetworking、XMNetworking)iOS原始碼