Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android下的聯網下載的操作

Android下的聯網下載的操作

編輯:關於Android編程

一:從網絡下載圖片 MainActivity:           NetService    1.由路徑獲取Url   2.使用url打開HttpURLConnection連接   3.根據路徑查找本地sd卡是否有緩存文件,如果文件存在,發送最後修改時間   File file = new File("/mnt/sdcard/" + URLEncoder.encode(path, "UTF-8"));   conn.setIfModifiedSince(file.lastModified());   4.得到響應返回碼,如果返回碼是200,則正確得到網絡連接   5.由連接獲取輸入流,將輸入流寫入到內存,由於是圖片,所以為byte,   6.將內存中的數據賦給byte數組data,   7.用Bitmap的解碼工廠將數據解碼為圖片   Bitmap image = BitmapFactory.decodeByteArray(data,0,data.length);   8,為了以後省流量,快速訪問,將此圖片緩存到本地   二:登錄:  classicLogin:     點擊登錄時開始新線程        1.獲得用戶名與密碼    2.調用服務層的方法為用戶名與密碼設置編碼:   Service.post(username,password)        3.若無異常提示成功,否則提示失敗       服務層的方法:   1.設置處理用戶名與密碼的Servlet路徑:     private String path = "http://192.168.1.100:8080/05.Web/LoginServlet"       1.post方法:     1.Creates a new URL instance by parsing spec.        URL url = new URL(path);     2.獲取HttpURLConnection連接     3.設置連接超時時間     4.設置請求方法為post     5.設置三個請求頭           conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");   conn.setRequestProperty("Content-Length", params.getBytes().length + "");   conn.setRequestProperty("Host", "192.168.1.100:8080");      6.Sets the flag indicating whether this URLConnection allows output   conn.setDoOutput(ture);      7.將得到的用戶名密碼編碼後輸出 username = URLEncoder.encode(username,"utf-8")   conn.getOutputStream().write(username.getBytes());    8.得到響應碼,若響應碼不是200,則拋出異常。       3.get方式:   1.get方式是:http://192.168.1.100:8080/05.Web/LoginServlet?username=xxx&password=xxx   所以在創建URL時應遵照這種格式:   String path =  "http://192.168.1.100:8080/05.Web/LoginServlet";   String params = "username=" + URLEncoder.encode(username, "UTF-8") + "&password=" + URLEncoder.encode(password, "UTF-8");   URL url = new URL(path + "?" + params);   2.打開HttpURLConnection連接   3.設置連接超時時間   4.設置請求方法   5.開始連接,得到返回碼   6.根據返回碼判斷網絡狀態   4.牛逼的方式:   常見的麻煩的方法已經有人寫好了,自己可以直接拿來調用:   1.在MainActivity中   private AsyncHttpClient client = new AsyncHttpClient();   2.在點擊登錄時調用client的post或get方法即可:   client.post(url, params, responseHandler)   client.get(url, params, responseHandler)   三:上傳:    上傳這種常見的麻煩的方法也被同一個牛逼人物寫好了,同上,直接調用   類似的,把將要上傳的文件也放入params中:        RequestParams params = new RequestParams();        params.put("username", username);        params.put("password", password);    params.put("upload", new File(upload));       client.post(url, params, new AsyncHttpResponseHandler();   四:下載 1.java中最簡單的下載   1.找到文件所在的路徑:   URL url = new URL(“http:xxxx/xx.txt”);   2.打開http連接   3.設置連接超時時間   4.設置請求方式   5.開始連接得到響應碼   6.響應碼正確(200)則將由連接得到的輸入流中的數據寫入到本地   2.多線程下載:        一:DownloadTask:繼承Thread,規定線程數THREAD_AMOUNT = 3;   1.在DownloadTask的構造函數中傳入下載地址,從下載地址中截取文件名   2.run方法   a) :打開連接,設置超時時間   b) :獲取文件長度 :conn.getConntentLength();   c) :計算每個線程要下載的長度   d) :開啟所有線程,每個線程會下載一部分數據到本地文件中   New DownloadThread(i).start();          二:內部類DownloadThread:繼承Thread,構造函數中傳遞的參數用來標記下載任務中的線程           1.run方法:   a) :設置當前線程要下載的起始位置,結束位置   b) :當前線程打開Http連接,設置超時時間,設置請求下載的范圍   c) :用隨機讀寫文件地文件讀寫,此時同單線程下載操作   3.多線程斷點續傳:    在多線程的基礎上修改:添加一個臨時文件記錄當前線程下載到了哪一個字節了,然後下次再啟動時,直接從當前臨時文件所記錄的地方接著下載.   一:在BPDownloadTask中的修改      a) :在BPDownloadTask的構造函數中創建臨時文件.          b) :在run方法啟動時,要判斷臨時文件是否存在,若不存在,則寫入每個線程的開始位置          c) :開啟線程,每個線程會下載一部分數據到本地文件中    二:在內部類DownloadThread中的修改    A):在run方法中創建記錄進度的臨時文件.   RandomAccessFile tempRaf = new RandomAccessFile(tempFile, "rws");    B):根據當前線程的id將指針移動到當前線程的位置讀取當前線程已完成的數據   tempRaf.seek(id * 4);   C):多個下載進程之間同步,統計所有線程總共完成了多少   synchronized(BPDownloadTask.this) {   totalFinish += threadFinish;   }   D):計算當前線程起始位置,結束位置,後續同多線程下載.
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved