導航:首頁 > 操作系統 > android非同步post

android非同步post

發布時間:2022-07-21 13:02:37

『壹』 android開發POST請求怎麼使用

網頁鏈接

這個博客表述的比較詳細的了,一般請求的話直接使用okhttp3這個庫就可以了。如果有大量介面的話還可以跟Retrofit2一起結合來使用。望採納。

『貳』 android sdk哪些非同步方法

android中有下列幾種非同步更新ui的解決辦法:
Activity.runOnUiThread(Runnable) View.post(Runnable) long) View.postDelayed(Runnable, long) 使用handler(線程間通訊)(推薦) AsyncTask(推薦)
對於下面這段代碼:
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
mImageView.setImageBitmap(bitmap);
}
}).start();
}

『叄』 android中post是什麼意思

一、需要用到的場景 在jQuery中使用$.post()就可以方便的發起一個post請求,在android程序中有時也要從伺服器獲取一些數據,就也必須得使用post請求了。 二、需要用到的主要類 在android中使用post請求主要要用到的類是HttpPost、HttpResponse、EntityUtils 三、主要思路 1、創建HttpPost實例,設置需要請求伺服器的url。 2、為創建的HttpPost實例設置參數,參數設置時使用鍵值對的方式用到NameValuePair類。 3、發起post請求獲取返回實例HttpResponse 4、使用EntityUtils對返回值的實體進行處理(可以取得返回的字元串,也可以取得返回的byte數組) 代碼也比較簡單,注釋也加上了,就直接貼出來了 [java] package com.justsy.url; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.os.Bundle; public class HttpURLActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.out.println("start url..."); String url = "192.168.2.112:8080/JustsyApp/Applet"; // 第一步,創建HttpPost對象 HttpPost httpPost = new HttpPost(url); // 設置HTTP POST請求參數必須用NameValuePair對象 List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("action", "downloadAndroidApp")); params.add(new BasicNameValuePair("packageId", "89dcb664-50a7-4bf2-aeed-49c08af6a58a")); params.add(new BasicNameValuePair("uuid", "test_ok1")); HttpResponse httpResponse = null; try { // 設置httpPost請求參數 httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); httpResponse = new DefaultHttpClient().execute(httpPost); //System.out.println(httpResponse.getStatusLine().getStatusCode()); if (httpResponse.getStatusLine().getStatusCode() == 200) { // 第三步,使用getEntity方法活得返回結果 String result = EntityUtils.toString(httpResponse.getEntity()); System.out.println("result:" + result); T.displayToast(HttpURLActivity.this, "result:" + result); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println("end url..."); setContentView(R.layout.main); } } ADD:使用HttpURLConnection 進行post請求 [java] String path = "192.168.2.115:8080/android-web-server/httpConnectServlet.do?PackageID=89dcb664-50a7-4bf2-aeed-49c08af6a58a"; URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setConnectTimeout(5000); System.out.println(conn.getResponseCode()); ============================================================================================================================ 通過get和post方式向伺服器發送請求 首先說一下get和post的區別 get請求方式是將提交的參數拼接在url地址後面,例如/index.jsp?num=23&jjj=888; 但是這種形式對於那種比較隱私的參數是不適合的,而且參數的大小也是有限制的,一般是1K左右吧,對於上傳文件 就不是很適合。 post請求方式是將參數放在消息體內將其發送到伺服器,所以對大小沒有限制,對於隱私的內容也比較合適。 如下Post請求 POST /LoginCheck HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Referer: 192.168.2.1/login.asp Accept-Language: zh-CN User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ZHCN) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: 192.168.2.1 Content-Length: 39 Connection: Keep-Alive Cache-Control: no-cache Cookie: language=en Username=admin&checkEn=0&Password=admin //參數位置 在android中用get方式向伺服器提交請求: 在android模擬器中訪問本機中的tomcat伺服器時,注意:不能寫localhost,因為模擬器是一個單獨的手機系統,所以要寫真是的IP地址。 否則無法訪問到伺服器。 //要訪問的伺服器地址,下面的代碼是要向伺服器提交用戶名和密碼,提交時中文先要經過URLEncoder編碼,因為模擬器默認的編碼格式是utf-8 //而tomcat內部默認的編碼格式是ISO8859-1,所以先將參數進行編碼,再向伺服器提交。 private String address = "192.168.2.101:80/server/loginServlet"; public boolean get(String username, String password) throws Exception { username = URLEncoder.encode(username);// 中文數據需要經過URL編碼 password = URLEncoder.encode(password); String params = "username=" + username + "&password=" + password; //將參數拼接在URl地址後面 URL url = new URL(address + "?" + params); //通過url地址打開連接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //設置超時時間 conn.setConnectTimeout(3000); //設置請求方式 conn.setRequestMethod("GET"); //如果返回的狀態碼是200,則一切Ok,連接成功。 return conn.getResponseCode() == 200; } 在android中通過post方式提交數據。 public boolean post(String username, String password) throws Exception { username = URLEncoder.encode(username);// 中文數據需要經過URL編碼 password = URLEncoder.encode(password); String params = "username=" + username + "&password=" + password; byte[] data = params.getBytes(); URL url = new URL(address); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(3000); //這是請求方式為POST conn.setRequestMethod("POST"); //設置post請求必要的請求頭 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 請求頭, 必須設置 conn.setRequestProperty("Content-Length", data.length + "");// 注意是位元組長度, 不是字元長度 conn.setDoOutput(true);// 准備寫出 conn.getOutputStream().write(data);// 寫出數據 return conn.getResponseCode() == 200; }

『肆』 android 輪詢的非同步請求怎麼實現

<input type="text" name="username" id="username" > <input type="button" value="測試" onclick="test();"> <script type="text/javascript"> get $.ajax 還有這2種方式 我用了個post作為例子 function test() { //這個是jquer的 請求 你要載入個jquery的庫 舉例是post請求 $.post( '這里是你請求的地址', { //你傳的參數 把你的input框的值以post方式傳送 username:$('#username').val() }, function(data) { 這里是從你請求的地址返回來的數據 具體怎麼處理就看你自己的需求了 }) } </script>

『伍』 android handler和非同步任務有什麼區別

其實handler與非同步任務沒有可比性,您的基礎還需要加強。下面這篇csdn的博客中有handler的詳細介紹,
http://blog.csdn.net/androidwuyou/article/details/52601498

AsyncTask實現的原理和適用的優缺點
AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以通過介面實現UI進度更新),最後反饋執行的結果給UI主線程.
使用的優點:
簡單,快捷
過程可控
使用的缺點:
在使用多個非同步操作和並需要進行Ui變更時,就變得復雜起來.

Handler非同步實現的原理和適用的優缺點
在Handler 非同步實現時,涉及到 Handler, Looper, Message,Thread四個對象,實現非同步的流程是主線程啟動Thread(子線程)運行並生成Message-Looper獲取Message並傳遞給HandlerHandler逐個獲取Looper中的Message,並進行UI變更。
使用的優點:
結構清晰,功能定義明確
對於多個後台任務時,簡單,清晰
使用的缺點:
在單個後台非同步處理時,顯得代碼過多,結構過於復雜(相對性)

AsyncTask介紹

Android的AsyncTask比Handler更輕量級一些(只是代碼上輕量一些,而實際上要比handler更耗資源),適用於簡單的非同步處理。
首先明確Android之所以有Handler和AsyncTask,都是為了不阻塞主線程(UI線程),且UI的更新只能在主線程中完成,因此非同步處理是不可避免的。

Android為了降低這個開發難度,提供了AsyncTask。AsyncTask就是一個封裝過的後台任務類,顧名思義就是非同步任務。
AsyncTask直接繼承於Object類,位置為android.os.AsyncTask。要使用AsyncTask工作我們要提供三個泛型參數,並重載幾個方法(至少重載一個)。

AsyncTask定義了三種泛型類型 Params,Progress和Result。
Params 啟動任務執行的輸入參數,比如HTTP請求的URL。
Progress 後台任務執行的百分比。
Result 後台執行任務最終返回的結果,比如String。
使用過AsyncTask 的同學都知道一個非同步載入數據最少要重寫以下這兩個方法:
doInBackground(Params…) 後台執行,比較耗時的操作都可以放在這里。注意這里不能直接操作UI。此方法在後台線程執行,完成任務的主要工作,通常需要較長的時間。在執行過程中可以調用publicProgress(Progress…)來更新任務的進度。
onPostExecute(Result) 相當於Handler 處理UI的方式,在這裡面可以使用在doInBackground 得到的結果處理操作UI。 此方法在主線程執行,任務執行的結果作為此方法的參數返回
有必要的話你還得重寫以下這三個方法,但不是必須的:
onProgressUpdate(Progress…) 可以使用進度條增加用戶體驗度。 此方法在主線程執行,用於顯示任務執行的進度。
onPreExecute() 這里是最終用戶調用Excute時的介面,當任務執行之前開始調用此方法,可以在這里顯示進度對話框。
onCancelled() 用戶調用取消時,要做的操作
使用AsyncTask類,以下是幾條必須遵守的准則:
Task的實例必須在UI thread中創建;
execute方法必須在UI thread中調用;
不要手動的調用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)這幾個方法;
該task只能被執行一次,否則多次調用時將會出現異常;
Handler介紹
一、 Handler主要接受子線程發送的數據, 並用此數據配合主線程更新UI.
當應用程序啟動時,Android首先會開啟一個主線程, 主線程為管理界面中的UI控制項,進行事件分發,更新UI只能在主線程中更新,子線程中操作是危險的。這個時候,Handler就需要出來解決這個復雜的問題。由於Handler運行在主線程中(UI線程中),它與子線程可以通過Message對象來傳遞數據, 這個時候,Handler就承擔著接受子線程傳過來的(子線程用sedMessage()方法傳遞)Message對象(裡麵包含數據), 把這些消息放入主線程隊列中,配合主線程進行更新UI。
二、Handler的特點
Handler可以分發Message對象和Runnable對象到主線程中, 每個Handler實例,都會綁定到創建他的線程中,
它有兩個作用:
(1)安排消息或Runnable 在某個主線程中某個地方執行
(2)安排一個動作在不同的線程中執行
Handler中分發消息的一些方法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post類方法允許你排列一個Runnable對象到主線程隊列中,
sendMessage類方法, 允許你安排一個帶數據的Message對象到隊列中,等待更新.

『陸』 android OKhttp 非同步POST請求

可以採用okGo 開實現,
OkGo.<String>post(BASEURL + "/test/deviceInfo")
.upJson(jsonObject)
.execute(callback);
然後在
@Override
public void onSuccess(Response<String> response) {} 內進行處理

閱讀全文

與android非同步post相關的資料

熱點內容
現代鋼琴教程pdf 瀏覽:25
客戶端框架源碼 瀏覽:208
python自動辦公能幹嘛 瀏覽:873
程序員追愛 瀏覽:252
程序員邏輯故事 瀏覽:768
加密icsot23i2c 瀏覽:713
你們有什麼好的解壓軟體 瀏覽:607
常州空氣壓縮機廠家 瀏覽:241
安卓如何關閉app內彈出的更新提示 瀏覽:409
e4a寫的app怎麼裝蘋果手機 瀏覽:201
海立壓縮機海信系 瀏覽:210
社保如何在app上合並 瀏覽:220
小米加密照片後綴 瀏覽:236
我的世界網易手機怎麼創伺服器 瀏覽:978
載入單頁源碼 瀏覽:930
阿里雲伺服器seo 瀏覽:777
海洋斗什麼時候上線安卓 瀏覽:86
中行app如何查每日匯款限額 瀏覽:840
輸入伺服器sn是什麼意思 瀏覽:725
sha1演算法java 瀏覽:90