我正在實現一個類,extends AsyncTask
和我在這個類中執行http請求。該類不是Activity
,因爲我想多次使用這個類,所以它位於一個單獨的java文件中。android中的非活動類的活動調用方法
我在我的Activity
中實例化這個類的對象,以在單獨的線程中執行http請求。當線程執行時,我想調用我的Activity
的方法。
我該如何實施?我需要在我的Activity
中的http請求的結果,但我不能處理這個到目前爲止。
這是線程任務的代碼...
public class PostRequest extends AsyncTask<String, Void, String> {
public String result = "";
@Override
protected String doInBackground(String... urls) {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://bla/index.php?" + urls[0]);
// httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
// convert response to string
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String result) {
}
}
這是創建線程類我Activity
代碼的一部分...
public class ListActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
PostRequest task = new PostRequest();
task.execute(new String[] { "action=getUsers" });
task.onPostExecute(task.result) {
}
}
public void Display(String result) {
try {
JSONArray jArray = new JSONArray(result);
JSONObject json_data = jArray.getJSONObject(0);
String value = json_data.getString("name");
TextView text = (TextView) findViewById(R.id.value);
text.setText(value);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
但是,我現在如何訪問此活動的方法?我試圖做到這一點像mActivity.Display();但是這不起作用......非常感謝! – Phil123
要麼使用你的活動名稱來代替活動的PostRequest功能的活動只是類型投射活動給你的活動.... –
@DheereshSingh,謝謝,我認爲類型轉換爲活動應該足夠,但你是對的,它應該是專注於真正的活動課程。 – antongorodezkiy