一、首先新創建一個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); } }