android 網路_網狀圖片查看器,
xml
<?xml version="1.0"?>-<LinearLayout tools:context=".MainActivity" android:paddingTop="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"><EditText android:id="@+id/et_url" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="http://www.baidu.com"/><Button android:id="@+id/bt_looksource" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="查看圖片"/>-<ScrollView android:layout_height="wrap_content" android:layout_width="wrap_content"><ImageView android:id="@+id/img_pic" android:layout_height="match_parent" android:layout_width="match_parent"/></ScrollView></LinearLayout>圖片查看控制項
java
package com.itheima.sourcelook;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.itheima.piclook.R;public class MainActivity extends Activity implements OnClickListener{ private EditText et_url; private ImageView img_pic; private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext =this; et_url = (EditText) findViewById(R.id.et_url); Button bt_looksource = (Button) findViewById(R.id.bt_looksource); img_pic = (ImageView) findViewById(R.id.img_pic); //二.設定點擊事件 bt_looksource.setOnClickListener(this); System.out.println("oncreate方法線程:"+Thread.currentThread().getName()); } //☆☆☆1.在主線程中建立一個Handler對象 private Handler handler = new Handler(){ //☆☆☆2.重寫handler的handlermessage方法,用來接收子線程中發來的訊息 public void handleMessage(android.os.Message msg) { //☆☆☆5.接收子線程發送的資料,處理資料。 Bitmap bitmap = (Bitmap) msg.obj; //☆☆☆6.當前方法屬於主線程可以做UI的更新 //五.擷取伺服器返回的內容,顯示到textview上 img_pic.setImageBitmap(bitmap);//設定ImageView的圖片內容 }; }; @Override public void onClick(View v) { try{ //三.oclick方法中擷取使用者輸入的url地址 final String url_str = et_url.getText().toString().trim(); if(TextUtils.isEmpty(url_str)){ Toast.makeText(mContext, "url不可為空", 0).show(); return ; } System.out.println("oclick方法線程:"+Thread.currentThread().getName()); //建立一個子線程做網路請求 new Thread(new Runnable() { @Override public void run() { try{ System.out.println("oclick方法runnable線程:"+Thread.currentThread().getName()); //四.請求url地址 //1.建立一個Url對象 URL url = new URL(url_str); //2.擷取一個UrlConnection對象 HttpURLConnection connection = (HttpURLConnection)url.openConnection(); //3.為UrlConnection對象設定一些請求的參數,請求方式,串連的逾時時間 connection.setRequestMethod("GET");//佈建要求方式 connection.setConnectTimeout(1000*10);//設定逾時時間 //4.在擷取url請求的資料前需要判斷響應碼,200 :成功,206:訪問部分資料成功 300:跳轉或重新導向 400:錯誤 500:伺服器異常 int code = connection.getResponseCode(); if(code == 200){ //5.擷取有效資料,並將擷取的流資料解析成String InputStream inputStream = connection.getInputStream(); //將一個讀取流轉換成一個圖片 Drawable , Btimap:位元影像 ????? Bitmap bitmap = BitmapFactory.decodeStream(inputStream); //☆☆☆3.子線中建立一個Message對象,為了攜帶子線程中擷取的資料給主線程。 Message msg = Message.obtain();//擷取一個Message對象,內部實現是:如果之前的Message存在直接返回,不存在建立新的Message返回 msg.obj = bitmap;//將擷取的資料封裝到msg中。 //☆☆☆4.使用handler對象將message發送到主線程。 handler.sendMessage(msg); } }catch (Exception e) { e.printStackTrace(); } } }).start(); }catch (Exception e) { e.printStackTrace(); } }}MainActivity
位元組流操作
package com.itheima.sourcelook;import java.io.ByteArrayOutputStream;import java.io.InputStream;public class StreamUtils { public static String streamToString(InputStream in){ String result =""; try{ //建立一個位元組數組寫入流 ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length = 0; while ( (length = in.read(buffer)) !=-1) { out.write(buffer, 0, length); out.flush(); } result = out.toString();//將位元組流轉換成string out.close(); }catch (Exception e) { e.printStackTrace(); } return result; }}StreamUtils
老師筆記
04 網狀圖片查看器
adb shell+ input text 內容;可以通過將內容輸入到手機上的輸入框。
將一個讀取流轉換成bitmap對象:
BitmapFactory:可以將檔案,讀取流,位元組數群組轉換成一個Bitmap對象。
Bitmap bitmap = BitmapFactory.decodeStream(InputStream in);
imageView.setImageBitmap(bitmap);//設定圖片內容