編輯:關於Android編程
訪問網絡已經有了很成熟的框架。這一篇只是介紹一下HttpURLConnection的簡單用法,以及裡面的”注意點”。這一篇可以復習或者學習HttpURLConnection、handler、以及Bitmap保存圖片。
需求:點擊按鈕,訪問一張網絡圖片顯示。
布局很簡單,只需要一個按鈕一個ImagetView:
下面是主程序的代碼,做出了逐行解釋。所以不再贅述。如下:
package com.itydl.imageviewer;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
static ImageView iv;
static MainActivity ma;
static Handler handler = new Handler(){
//此方法在主線程中調用,可以用來刷新ui
public void handleMessage(android.os.Message msg) {
//處理消息時,需要知道到底是成功的消息,還是失敗的消息
switch (msg.what) {
case 1:
//把位圖對象顯示至imageview
iv.setImageBitmap((Bitmap)msg.obj);
break;
case 0:
Toast.makeText(ma, "請求失敗", 0).show();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
ma = this;
}
//點擊按鈕觸發
public void click(View v){
Thread t = new Thread(){
@Override
public void run() {
//下載圖片
//1.確定網址
String path = "http://192.168.1.105:8080/meinv.jpg";
try {
//2.把網址封裝成一個url對象
URL url = new URL(path);
//3.獲取客戶端和服務器的連接對象,此時還沒有建立連接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//4.對連接對象進行初始化
//設置請求方法,注意大寫
conn.setRequestMethod("GET");
//設置連接超時
conn.setConnectTimeout(5000);
//設置讀取超時
conn.setReadTimeout(5000);
//5.發送請求,與服務器建立連接
conn.connect();
//如果響應碼為200,說明請求成功
if(conn.getResponseCode() == 200){
//獲取服務器響應頭中的流,流裡的數據就是客戶端請求的數據
InputStream is = conn.getInputStream();
//直接讀取出流裡的數據,通過輸入流並構造成位圖Bitmap對象。
Bitmap bm = BitmapFactory.decodeStream(is);
//注意!程序崩潰。子線程不可更新UI
// ImageView iv = (ImageView) findViewById(R.id.iv);
// //把位圖對象顯示至imageview
// iv.setImageBitmap(bm);
//使用Handler機制
Message msg = new Message();
//消息對象可以攜帶數據
msg.obj = bm;
msg.what = 1;
//把消息發送至主線程的消息隊列
handler.sendMessage(msg);
}
else{
//注意!程序崩潰。子線程不可更新UI
// Toast.makeText(MainActivity.this, "請求失敗", 0).show();
//使用Handler機制
Message msg = handler.obtainMessage();
msg.what = 0;
handler.sendMessage(msg);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
t.start();
}
}
接下來來看一下美女長什麼樣子吧!!

雖然很簡單,但是有三個地方再唠叨一下:
Bitmap bm = BitmapFactory.decodeStream(is);//直接獲取位圖
iv.setImageBitmap((Bitmap)msg.obj);//直接位圖放入ImageView
Handler機制的簡單用法。
android按鈕圖片和文本居中的代碼
最近優化項目代碼時,發現一個比較詭異的現象:每當界面進入ActivityA時,cpu在不斷的消耗,內存在不斷的緩慢增長(雖然每次增長的量非常小)。如下圖:最後經過仔細排查
訊飛輸入法怎麼設置手寫靈敏度
訊飛輸入法怎麼設置手寫靈敏度?在輸入法中使用手寫的時候,有的時候感覺靈敏度不是很好。如果你想讓手機系統快速反應你手寫的輸入文字,那就來設置下手寫靈敏度吧,訊
聊聊android界面適配
為什麼要適配?我們先來看一組統計數據,這是國外opensignal給出的統計數據,我們來看看去年8月份的統計數據,參考鏈接我們先來看看幾個圖表:2014設備分布圖:201
解決GridView內容顯示不全問題
我用GridView來顯示一些字符串,而字符串的長度是不固定的,然後就遇到問題了:有時字符重疊,有時顯示不全,有時兩種問題同時出現。見下圖: 圖一 GridView顯示重