我是一個相對較新的Android開發人員,我無法理解如何執行此操作。我一直在研究所有的論壇,我做了一些進步,但仍然在這裏。 因此,我想要做的是將POST請求發送到網頁(它只發送一個POST參數)並將結果作爲字符串返回的常用函數。 我這裏的主線程用異步發送HttpPost並獲取字符串結果
public class AppActivity extends Activity {
HTTPPostData PostData = new HTTPPostData("id");
PostData.execute();
txtLabel.setText(PostData.Result);
}
,我有我的HTTPPostData異步類
public class HTTPPostData extends AsyncTask<String, Long, Object> {
String Value = null;
String Result = null;
public HTTPPostData(String query) {
Value = query;
}
@Override
protected String doInBackground(String... params) {
byte[] Bresult = null;
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.mypage.com/script.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("cmd", Value));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
HttpResponse response = client.execute(post);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
Bresult = EntityUtils.toByteArray(response.getEntity());
Result = new String(Bresult, "UTF-8");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e) {
}
return Result;
}
}
我想要使用此功能幾次(同一個活動中或以相同的其他活動分享應用)。我現在有點混亂,所以我需要你的幫助。我的理解是,我在doInBackground()完成之前要求結果,並且得到一個空的結果。
在此先感謝您的幫助
我更喜歡在應用程序的不同情況下擁有一個公共類,但現在我發現我必須爲每個類創建一個異步類。例如,如果我想獲取一個數字,然後將其與存儲在SharedPrefferences中的其他數據進行比較,然後獲取一個字符串並將其顯示在某個TextView上,則必須爲這些操作中的每一個創建一個單獨的類,其中包含幾乎相同的代碼。正如我所想的,異步類不能創建兩次。 – ali 2012-03-31 21:25:18
@ali我會把所有的Http-to-String的東西放到一個常用的實用函數中,然後爲每個你想獲得互聯網數據的地方創建一個準系統AsyncTask,它只是調用你的通用函數,然後描述你的回調結果想在onPostExecute。它可能感覺被浪費了創造多種asynctask,但他們每個人都必須執行不同的回調。也許有一個更清潔的方式,但我不確定。也許你可以創建一個抽象的asynctask類,然後覆蓋你想要使用它的每個地方的onPostExecute。 – Tim 2012-03-31 21:51:06
這就是我所做的。謝謝! – ali 2012-04-03 17:04:42