當前位置:首頁 » 安卓系統 » android網路請求

android網路請求

發布時間: 2022-02-14 23:10:19

① 安卓開發網路請求是怎麼做的非同步

安卓限制了發網路請求只能在子線程,不然會報錯的!如果你是用asynHttpClient這類框架的話,它會將你的請求放在隊列里,通過線程池來發出請求的,也就是說裡面會自己開啟子線程請求。
如果使用UrHttpConnection或HttpClient的話,就需要自己手動開啟子線程進行請求!
下面舉兩個方法:
第一,new Thread發出請求,handler進行通訊!
第二,asynTask進行非同步請求,重寫方法進行UI更新!

② 一段安卓處理網路請求的代碼,麻煩給解釋一下,盡量詳細一些

Handler用於接收發送的消息 ,和處理結果
進行網路請求後, 可能有如下幾個狀態需要處理
超時:MSG_NET_TIMEOUT:

網路錯誤:MSG_NET_STATUS_ERROR:

成功:MSG_NET_SUCC

通過handler發送如上消息, 並附帶可能的數據
Message msg = new Message();
msg.obj = data; //data即數據
msg.what = MSG_NET_SUCC; //根據網路返回不同結果
mHandler.sendMessage(msg);//發送

Handler接到消息後, 通過handleMessage(Message msg)即進行不同的處理
這里超時和網路錯誤不做任何動作
成功對返回的結果進行JSON解析

③ 如何監控android網路請求

可以利用相關安全軟體來監控,如果有ROOT許可權更好。首推LBE安全大師,你的採納就是對我的肯定

④ android網路請求的幾種方式有哪些有什麼不同

參考內容如下:
Android應用經常會和伺服器端交互,這就需要手機客戶端發送網路請求,下面介紹四種常用網路請求方式,我這邊是通過Android單元測試來完成這四種方法的,還不清楚Android的單元測試的同學們請看Android開發技巧總結中的Android單元測試的步驟一文。

java.net包中的HttpURLConnection類

Get方式:

// Get方式請求
public static void requestByGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建一個URL對象
URL url = new URL(path);
// 打開一個HttpURLConnection連接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 設置連接超時時間
urlConn.setConnectTimeout(5 * 1000);
// 開始連接
urlConn.connect();
// 判斷請求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 獲取返回的數據
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_GET, "Get方式請求成功,返回數據如下:");
Log.i(TAG_GET, new String(data, "UTF-8"));
} else {
Log.i(TAG_GET, "Get方式請求失敗");
}
// 關閉連接
urlConn.disconnect();
}

Post方式:

// Post方式請求
public static void requestByPost() throws Throwable {
String path = "https://reg.163.com/logins.jsp";
// 請求的參數轉換為byte數組
String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")
+ "&pwd=" + URLEncoder.encode("android", "UTF-8");
byte[] postData = params.getBytes();
// 新建一個URL對象
URL url = new URL(path);
// 打開一個HttpURLConnection連接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 設置連接超時時間
urlConn.setConnectTimeout(5 * 1000);
// Post請求必須設置允許輸出
urlConn.setDoOutput(true);
// Post請求不能使用緩存
urlConn.setUseCaches(false);
// 設置為Post請求
urlConn.setRequestMethod("POST");
urlConn.setInstanceFollowRedirects(true);
// 配置請求Content-Type
urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencode");
// 開始連接
urlConn.connect();
// 發送請求參數
DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
dos.write(postData);
dos.flush();
dos.close();
// 判斷請求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 獲取返回的數據
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_POST, "Post請求方式成功,返回數據如下:");
Log.i(TAG_POST, new String(data, "UTF-8"));
} else {
Log.i(TAG_POST, "Post方式請求失敗");
}
}

org.apache.http包中的HttpGet和HttpPost類

Get方式:

// HttpGet方式請求
public static void requestByHttpGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建HttpGet對象
HttpGet httpGet = new HttpGet(path);
// 獲取HttpClient對象
HttpClient httpClient = new DefaultHttpClient();
// 獲取HttpResponse實例
HttpResponse httpResp = httpClient.execute(httpGet);
// 判斷是夠請求成功
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
// 獲取返回的數據
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
Log.i(TAG_HTTPGET, "HttpGet方式請求成功,返回數據如下:");
Log.i(TAG_HTTPGET, result);
} else {
Log.i(TAG_HTTPGET, "HttpGet方式請求失敗");
}
}

Post方式:

// HttpPost方式請求
public static void requestByHttpPost() throws Exception {
String path = "https://reg.163.com/logins.jsp";
// 新建HttpPost對象
HttpPost httpPost = new HttpPost(path);
// Post參數
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", "helloworld"));
params.add(new BasicNameValuePair("pwd", "android"));
// 設置字元集
HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
// 設置參數實體
httpPost.setEntity(entity);
// 獲取HttpClient對象
HttpClient httpClient = new DefaultHttpClient();
// 獲取HttpResponse實例
HttpResponse httpResp = httpClient.execute(httpPost);
// 判斷是夠請求成功
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
// 獲取返回的數據
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
Log.i(TAG_HTTPGET, "HttpPost方式請求成功,返回數據如下:");
Log.i(TAG_HTTPGET, result);
} else {
Log.i(TAG_HTTPGET, "HttpPost方式請求失敗");
}
}

以上是一些部分代碼,測試的時候在測試類中運行對應的測試方法即可。

⑤ android中網路請求中頁面關閉了會怎麼樣

把你要做的東西,比如從伺服器拿數據,從資料庫拿數據,界面重繪等,寫在一個方法裡面,在onResume方法調用你這個方法。要不要用線程根據實際情況判斷,注意非UI Thread不能直接操作界面

⑥ Android將所有網路請求及邏輯都放在Service中處理是否合適

不太合適,所有的都寫在一個地方,顯得代碼臃腫,不好維護,最好分層():網路請求只負責請求數據(c),對於數據處理的邏輯判斷,放到邏輯層(m),然後,對於頁面展示的放到activity裡面刷新視圖即可,這里只負責接收數據後刷新界面,不做任何判斷邏輯(v)。。。相當於mvc模式。

⑦ android怎麼讓網路請求延遲

手機的網路肯定需要考慮延遲了。可以使用wifi進行測試。不過想真正上線產品,需要考慮2G網路的延遲。

⑧ android網路請求數據是同步還是非同步

非同步請求,因為UI線程(主線程)不允許有5秒以上的耗時操作.在主線程網路請求會導致阻塞,看起來程序就像假死了一樣.所以都是非同步請求.

⑨ android 網路請求數據一般寫在哪

在iOS開發中有大名鼎鼎的ASIHttpRequest庫,用來處理網路請求操作,今天要介紹的是一個在Android上同樣強大的網路請求庫android-async-http,目前非常火的應用Instagram和Pinterest的Android版就是用的這個網路請求庫。這個網路請求庫是基於Apache HttpClient庫之上的一個非同步網路請求處理庫,網路處理均基於Android的非UI線程,通過回調方法處理請求結果。

其主要特徵如下:

■處理非同步Http請求,並通過匿名內部類處理回調結果
■Http請求均位於非UI線程,不會阻塞UI操作
■通過線程池處理並發請求
■處理文件上傳、下載
■響應結果自動打包JSON格式
■自動處理連接斷開時請求重連
使用android-async-http也非常簡單,到官網下載依賴jar包,導入工程中libs文件夾下並添加到工程路徑即可。

⑩ Android第一次網路請求非常慢,之後都非常快!

你這個問題真是高端
我建議你換一個瀏覽器比如說獵豹瀏覽器
再回來說話

熱點內容
wifi路由手機怎麼設置密碼 發布:2025-02-06 07:00:57 瀏覽:985
nsurlsession上傳 發布:2025-02-06 06:55:18 瀏覽:336
亞洲十帥exo訪問 發布:2025-02-06 06:51:40 瀏覽:98
編程一首詩 發布:2025-02-06 06:45:04 瀏覽:528
驚聲尖笑5下載ftp 發布:2025-02-06 06:33:16 瀏覽:528
共享文件夾讓輸入密碼 發布:2025-02-06 06:32:28 瀏覽:970
收銀伺服器響應出錯什麼意思 發布:2025-02-06 06:24:43 瀏覽:607
sql用戶授權 發布:2025-02-06 06:24:42 瀏覽:677
蘋果手機相冊顯示正在上傳 發布:2025-02-06 06:05:43 瀏覽:542
hadoop下載文件夾 發布:2025-02-06 06:05:08 瀏覽:187