欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中使用HttpURLConnection實現(xiàn)GET POST JSON數(shù)據(jù)與下載圖片

 更新時間:2016年01月14日 11:16:25   作者:gloomyfish  
這篇文章主要介紹了Android中使用HttpURLConnection實現(xiàn)GET POST JSON數(shù)據(jù)與下載圖片,需要的朋友可以參考下

Android6.0中把Apache HTTP Client所有的包與類都標(biāo)記為deprecated不再建議使用所有跟HTTP相關(guān)的數(shù)據(jù)請求與提交操作都通過HttpURLConnection類實現(xiàn),現(xiàn)實是很多Android開發(fā)者一直都Apache HTTP Client來做andoird客戶端與后臺HTTP接口數(shù)據(jù)交互,小編剛剛用HttpURLConnection做了一個android的APP,不小心踩到了幾個坑,總結(jié)下最常用的就通過HttpURLConnection來POST提交JSON數(shù)據(jù)與GET請求JSON數(shù)據(jù)。此外就是下載圖片,下載圖片分為顯示進度與不顯示進度兩種。其中提交數(shù)據(jù)的時候涉及中文一定要先把中文轉(zhuǎn)碼成utf-8之后在POST提交,否則就會一直遇到HTTP 400的錯誤。

一、GET請求JSON數(shù)據(jù)的例子

public UserDto execute(String... params) { 
 InputStream inputStream = null; 
 HttpURLConnection urlConnection = null; 
 
 try { 
 // read responseURLEncoder.encode(para, "GBK"); 
 String urlWithParams = DOMAIN_ADDRESS + MEMBER_REQUEST_TOKEN_URL + "?userName=" + java.net.URLEncoder.encode(params[0],"utf-8") + "&password=" + params[1]; 
 URL url = new URL(urlWithParams); 
 urlConnection = (HttpURLConnection) url.openConnection(); 
 
 /* optional request header */ 
 urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
 
 /* optional request header */ 
 urlConnection.setRequestProperty("Accept", "application/json"); 
 
 /* for Get request */ 
 urlConnection.setRequestMethod("GET"); 
 int statusCode = urlConnection.getResponseCode(); 
 
 /* 200 represents HTTP OK */ 
 if (statusCode == 200) { 
  inputStream = new BufferedInputStream(urlConnection.getInputStream()); 
  String response = HttpUtil.convertInputStreamToString(inputStream); 
  Gson gson = new Gson(); 
  UserDto dto = gson.fromJson(response, UserDto.class); 
  if (dto != null && dto.getToken() != null) { 
  Log.i("token", "find the token = " + dto.getToken()); 
  } 
  return dto; 
 } 
 
 } catch (Exception e) { 
 e.printStackTrace(); 
 } finally { 
 if (inputStream != null) { 
  try { 
  inputStream.close(); 
  } catch (IOException e) { 
  e.printStackTrace(); 
  } 
 } 
 if (urlConnection != null) { 
  urlConnection.disconnect(); 
 } 
 } 
 return null; 
} 

二、POST提交JSON數(shù)據(jù)

public Map<String, String> execute(NotificationDto dto) { 
 InputStream inputStream = null; 
 HttpURLConnection urlConnection = null; 
 try { 
 URL url = new URL(getUrl); 
 urlConnection = (HttpURLConnection) url.openConnection(); 
 
 /* optional request header */ 
 urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
 
 /* optional request header */ 
 urlConnection.setRequestProperty("Accept", "application/json"); 
 dto.setCreator(java.net.URLEncoder.encode(dto.getCreator(), "utf-8")); 
  
 // read response 
 /* for Get request */ 
 urlConnection.setRequestMethod("POST"); 
 urlConnection.setDoOutput(true); 
 DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream()); 
 Gson gson = new Gson(); 
 String jsonString = gson.toJson(dto); 
 wr.writeBytes(jsonString); 
 wr.flush(); 
 wr.close(); 
 // try to get response 
 int statusCode = urlConnection.getResponseCode(); 
 if (statusCode == 200) { 
  inputStream = new BufferedInputStream(urlConnection.getInputStream()); 
  String response = HttpUtil.convertInputStreamToString(inputStream); 
  Map<String, String> resultMap = gson.fromJson(response, Map.class); 
  if (resultMap != null && resultMap.size() > 0) { 
  Log.i("applyDesigner", "please check the map with key"); 
  } 
  return resultMap; 
 } 
 } 
 catch(Exception e) 
 { 
 e.printStackTrace(); 
 } 
 finally 
 { 
 if (inputStream != null) { 
  try { 
  inputStream.close(); 
  } catch (IOException e) { 
  e.printStackTrace(); 
  } 
 } 
 if (urlConnection != null) { 
  urlConnection.disconnect(); 
 } 
 } 
 return null; 
} 

三、下載圖片顯示下載進度

package com.example.demo; 
 
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
 
public class ImageLoadTask extends AsyncTask<String, Void, Bitmap> { 
 private Handler handler; 
 
 public ImageLoadTask(Handler handler) { 
 this.handler = handler; 
 } 
 
 protected void onPostExecute(Bitmap result) { 
 Message msg = new Message(); 
 msg.obj = result; 
 handler.sendMessage(msg); 
 } 
 
 protected Bitmap doInBackground(String... getUrls) { 
 InputStream inputStream = null; 
 HttpURLConnection urlConnection = null; 
 
 try { 
  // open connection 
  URL url = new URL(getUrls[0]); 
  urlConnection = (HttpURLConnection) url.openConnection(); 
  /* for Get request */ 
  urlConnection.setRequestMethod("GET"); 
  int fileLength = urlConnection.getContentLength(); 
  int statusCode = urlConnection.getResponseCode(); 
  if (statusCode == 200) { 
  inputStream = urlConnection.getInputStream(); 
  byte data[] = new byte[4096]; 
  long total = 0; 
  int count; 
  ByteArrayOutputStream output = new ByteArrayOutputStream(); 
  while ((count = inputStream.read(data)) != -1) { 
   total += count; 
   // publishing the progress.... 
   if (fileLength > 0 && handler != null) { 
   handler.sendEmptyMessage(((int) (total * 100 / fileLength)) - 1); 
   } 
   output.write(data, 0, count); 
  } 
  ByteArrayInputStream bufferInput = new ByteArrayInputStream(output.toByteArray()); 
  Bitmap bitmap = BitmapFactory.decodeStream(bufferInput); 
  inputStream.close(); 
  bufferInput.close(); 
  output.close(); 
  Log.i("image", "already get the image by uuid : " + getUrls[0]); 
  handler.sendEmptyMessage(100); 
  return bitmap; 
  } 
 } catch (Exception e) { 
  e.printStackTrace(); 
 } finally { 
  if (inputStream != null) { 
  try { 
   inputStream.close(); 
  } catch (IOException e) { 
   e.printStackTrace(); 
  } 
  } 
  if (urlConnection != null) { 
  urlConnection.disconnect(); 
  } 
 } 
 return null; 
 } 
 
} 

總結(jié):使用HttpURLConnection提交JSON數(shù)據(jù)的時候編碼方式為UTF-8所有中文字符請一定要預(yù)先轉(zhuǎn)碼為UTF-8,然后在后臺服務(wù)器對應(yīng)的API中解碼為UTF-8,不然就會報錯HTTP 400。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)Android軟件編程有所幫助。

相關(guān)文章

  • android多行標(biāo)簽熱點示例

    android多行標(biāo)簽熱點示例

    這篇文章主要介紹了android多行標(biāo)簽熱點示例,需要的朋友可以參考下
    2014-04-04
  • Android手機抓包步驟

    Android手機抓包步驟

    這篇文章主要介紹了Android手機抓包步驟,在android網(wǎng)絡(luò)開發(fā)中這個功能還是很有必要的,下面把抓包步驟分享給大家
    2013-11-11
  • Android自定義View仿華為圓形加載進度條

    Android自定義View仿華為圓形加載進度條

    這篇文章主要為大家詳細(xì)介紹了Android自定義View仿華為圓形加載進度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Kotlin中l(wèi)et()with()run()apply()also()函數(shù)的使用方法與區(qū)別

    Kotlin中l(wèi)et()with()run()apply()also()函數(shù)的使用方法與區(qū)別

    在Kotlin中的源碼標(biāo)準(zhǔn)庫(Standard.kt)中提供了一些Kotlin擴展的內(nèi)置函數(shù)可以優(yōu)化kotlin的編碼,今天為大家聊聊let,with,run,apply,also幾個函數(shù)的用法與區(qū)別
    2018-03-03
  • 詳解Android自定義權(quán)限使用總結(jié)

    詳解Android自定義權(quán)限使用總結(jié)

    這篇文章主要介紹了詳解Android自定義權(quán)限使用總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • AndroidStudio實現(xiàn)能在圖片上涂鴉程序

    AndroidStudio實現(xiàn)能在圖片上涂鴉程序

    這篇文章主要為大家詳細(xì)介紹了AndroidStudio實現(xiàn)能在圖片上涂鴉程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android圓角按鈕的制作方法

    Android圓角按鈕的制作方法

    這篇文章主要為大家詳細(xì)介紹了Android圓角按鈕的制作方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android Studio 運行按鈕灰色的完美解決方法

    Android Studio 運行按鈕灰色的完美解決方法

    今天新建項目的時候突然發(fā)現(xiàn)編譯后運行按鈕為灰色,今天小編給大家?guī)砹薃ndroid Studio 運行按鈕灰色的完美解決方法,非常不錯,對大家的需要或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-10-10
  • Android Studio 3.6中新的視圖綁定工具ViewBinding 用法詳解

    Android Studio 3.6中新的視圖綁定工具ViewBinding 用法詳解

    這篇文章主要介紹了Android Studio 3.6中新的視圖綁定工具ViewBinding 用法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Android仿微信發(fā)表說說實現(xiàn)拍照、多圖上傳功能

    Android仿微信發(fā)表說說實現(xiàn)拍照、多圖上傳功能

    這篇文章主要為大家詳細(xì)介紹了Android仿微信發(fā)表說說實現(xiàn)拍照、多圖上傳功能,使用Retrofit2.0技術(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評論