我有一個類,我用它從我的應用程序發送數據到一個網站。有多種方法迎合不同類型的數據,我想送,代碼提取物在這裏:數據庫從AsyncTask更新onPostExecute
public class TransmitMetrics {
private final String request = "http://192.168.0.60/post.php";
private String function;
private URL url;
private HttpURLConnection connection;
private String line;
private String urlParameters;
public void updatePhone(String device_id, String country) {
String make = Build.MANUFACTURER;
String model = Build.MODEL;
String sdk = Build.VERSION.SDK;
function = "phoneupdate";
urlParameters = "function=" + function + "&device_id=" + device_id
+ "&make=" + make + "&model=" + model + "&country=" + country
+ "&sdk=" + sdk;
new sendData().execute();
}
然後我有一個嵌套的AsyncTask類(送出數據),這與不能在運行的HttpURLConnection的東西交易mainUI線程,這裏的部分代碼:
private class sendData extends AsyncTask<Void, Void, Integer> {
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
//Proposed DB stuff here based on return code
//stored in the result variable.
}
@Override
protected Void doInBackground(Void... arg0) {
try {
url = new URL(request);
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
try {
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length",
"" + Integer.toString(urlParameters.getBytes().length));
connection.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(
connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
我沒有問題的代碼,它工作正常,但是,我最近一直在努力提高應用程序中加入一個數據庫更新取決於響應從HttpURLConnection返回的代碼。 onPostExecute()是標準方式,但我不確定是否應該開始聲明數據庫連接並從onPostExecute()方法內執行數據庫更新。
我想要一些建議,如果有更好的方法來做到這一點,或者如果我不應該首先使用AsyncTask這種類型的功能。
謝謝,這是更有意義的,我打算將HTTP位移出一個新的類,但唯一的問題是,異步任務不在onPostExecute()方法中爲您提供很大的靈活性,因爲它僅用於UI更新。如果我有一個單獨的HTTP和數據庫操作類,我可以用onPostExecute()方法調用具有有效上下文的數據庫類嗎? – bazza2000
使用Handler/Thread類會更好嗎? – bazza2000
*異步任務不會爲onPostExecute()方法提供很大的靈活性,因爲它只能用於UI更新*您可以在onPostExecute()方法中返回自定義對象,並且您可以靈活使用。您可以創建一個自定義的'HttpResponseObject'類,其中包含響應代碼,失敗細節以及您需要的任何內容。如果您需要額外的靈活性,可以在UI線程上返回並評估。這足夠靈活嗎? – gunar