适用于android 4.0以上版本的子线程网络图片查看器
生活随笔
收集整理的這篇文章主要介紹了
适用于android 4.0以上版本的子线程网络图片查看器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
android 4.0版本的新特性之一:加載網絡內容時會自動判斷是否在主線程中運行。
并且獲取到內容時不能直接在子線程中設置主線程中的View,會報出以下異常
異常:
CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
只有原始的線程(主線程, ui線程)才能修改view對象.
這樣就必須用到Handler 消息接收發送者。
MainActivity.class
import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL;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.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener {private Button btn_chakan;private ImageView img;private EditText edt_path;private int success=0;private Handler handler=new Handler(){/** 接受消息* */@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if(msg.what==0){img.setImageBitmap((Bitmap) msg.obj);}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化控件init();}private void init() {btn_chakan=(Button) findViewById(R.id.btn_ok);img=(ImageView) findViewById(R.id.img);edt_path=(EditText) findViewById(R.id.edt_path);btn_chakan.setOnClickListener(this);}//按鈕監聽事件@Overridepublic void onClick(View arg0) {System.out.println("");final String path=edt_path.getText().toString();//獲取路徑System.out.println("獲取路徑");System.out.println("開始獲取圖片");new Thread(new Runnable(){@Overridepublic void run() {Bitmap bitmap=getimage(path);Message msg=new Message();msg.what=success;msg.obj=bitmap;handler.sendMessage(msg);}}).start();}//根據url連接訪問網絡 抓取圖片public Bitmap getimage(String url) {HttpURLConnection conn = null;System.out.println("創建URL對象");URL murl;//創建一個URL對象try {murl = new URL(url);System.out.println("得到URL連接");conn=(HttpURLConnection) murl.openConnection();//得到url連接對象System.out.println("設置請求方式");conn.setRequestMethod("GET");//設置請求方式System.out.println("設置超時時間");conn.setConnectTimeout(10000);//設置連接服務器超時時間System.out.println("設置讀取超時時間");conn.setReadTimeout(5000);//設置讀取超時時間System.out.println("開始連接");conn.connect();//開始連接System.out.println("得到相應嗎");//得到相應嗎System.out.println(conn.getResponseCode() );if(conn.getResponseCode()==200){//訪問成功System.out.println("訪問成功"+conn.getResponseCode());InputStream is= conn.getInputStream();//得到服務器返回的流數據Bitmap bitmap=BitmapFactory.decodeStream(is);//根據流數據創建一個位圖對象return bitmap;}else{//訪問失敗System.out.println("訪問失敗"+conn.getResponseCode());}} catch (Exception e) {e.printStackTrace();}finally{if(conn!=null){System.out.println("關閉連接");conn.disconnect();//關閉連接}} return null;}} Layout_main.xml <LinearLayout 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"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"tools:context=".MainActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="網絡圖片路徑" /><EditText android:id="@+id/edt_path"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="http://img4.07net01.com/upload/images/2016/05/06/153431060535121.png"/><Button android:id="@+id/btn_ok"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="查看"/><ImageView android:id="@+id/img"android:layout_width="wrap_content"android:layout_height="wrap_content"/> </LinearLayout>最后可別別忘了添加權限哦!! <uses-permission android:name="android.permission.INTERNET"/>與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的适用于android 4.0以上版本的子线程网络图片查看器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 频率计设计——电路部分
- 下一篇: 网页源代码查看器