黎活明8天快速掌握android視頻教程--23_網絡通訊之網絡圖片查看器

一、首先新創建一個java web項目的工程。使用的是myeclipe開發軟件java

圖片的下載路徑是http://192.168.1.103:8080/lihuoming_23/3.png  當前手機和電腦在同一個局域網範圍內

2 、Android項目的工程以下

 

整個工程採用MVC模式:android

一、controller是控制層、包括activity 、fragment 、adapter、broadcast、serviceweb

二、bussiess是業務層,主要負責具體的業務操做,例如從後臺下載下載圖片這就是一個具體的業務操做,業務操做的時候,最後不要對業務操做過程當中產生的異常進行處理,應該將異常拋出去到控制層,由控制層對異常進行處理,控制層若是收到了異常,說明該業務失敗,控制層在作出相應的toast提示,或者提示用於作出相應的操做。網絡

這裏最好的操做是:定義一個業務操做接口,而後在寫一個業務的實現類,controller只和業務類打交道ide

三、模型層:主要是對數據進行操做、包括javabean對象、db dao工具

四、utils:工具類this

2 Android studio工程url

一、xml文件spa

<?xml version="1.0" encoding="utf-8"?>
<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:orientation="vertical"
    tools:context=".controller.activity.MainActivity">

    <TextView
        android:textSize="25sp"
        android:text="從網絡得到下載的圖片"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btn_main_download"
        android:textSize="25sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="點擊下載"/>
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/iv_main_show"/>

</LinearLayout>

2 業務操做類線程

按照上面的規範最好寫出:

先定義一個業務操做類的接口

public interface ImageBussiess  {

public static byte[] downLoadImage(String path) throws Exception
}

而後定義業務的實現類

/**
 * Created by Administrator on 2017/4/17.
 * 下載圖片的業務操做類,業務層不要try catch異常
 * 應該將異常拋出去,由控制層activity來進行處理和顯示
 *
 */
public class ImageBussiessImp  Implement  ImageBussiess{
    public static byte[] downLoadImage(String path) throws IOException {
        URL url = new URL(path);
        HttpURLConnection openConnection = (HttpURLConnection) url.openConnection();
        openConnection.setConnectTimeout(5000);
        openConnection.setRequestMethod("GET"); //採用get的請求方式
        openConnection.connect();
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        InputStream inputStream = null;
        if(openConnection.getResponseCode() == 200){
           inputStream = openConnection.getInputStream();
            byte[] buffer = new byte[1024];

            int len = -1;
            while ((len = inputStream.read(buffer)) != -1){
                outputStream.write(buffer,0,len);
            }
        }
        inputStream.close();
        return  outputStream.toByteArray();
    }
}

 

4 activity

public class MainActivity extends Activity {

    private ImageView iv_main_show;
    private Button btn_main_download;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initListener();
    }

    private void initListener() {
        btn_main_download.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ExecutorService executorService = Executors.newCachedThreadPool(); // 網絡下載都必須在子線程中進行,這裏使用的是線程池的方式開啓線程
                executorService.execute(new Runnable() {
                    @Override
                    public void run() {
                        String path = "http://192.168.1.103:8080/lihuoming_23/3.png";//myeclpise創建的工程
                        try {
                            byte[] datas = ImageBussiess.downLoadImage(path);
                            final Bitmap bitmap = BitmapFactory.decodeByteArray(datas, 0, 
                                    datas.length);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    iv_main_show.setImageBitmap(bitmap);//界面的顯示必須在主線程中,runOnUiThread就是在線程中更新界面的顯示
                                }
                            });

                        } catch (final IOException e) {
                            e.printStackTrace();
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this, "圖片下載失敗" + e.toString(),
                                            Toast.LENGTH_LONG).show();
                                }
                            });
                            ;
                        }
                    }
                });


            }
        });
    }

    private void initView() {
        btn_main_download = (Button) findViewById(R.id.btn_main_download);
        iv_main_show = (ImageView) findViewById(R.id.iv_main_show);
    }
}
相關文章
相關標籤/搜索