Я реализую класс, который extends AsyncTask
, и я выполняю HTTP-запрос в этом классе. Класс не является Activity
и находится в отдельном java-файле, потому что я хочу использовать этот класс несколько раз.Вызов метода activitiy из класса non-activity в android
Я создаю объект этого класса в своем Activity
, чтобы выполнить запрос http в отдельном потоке. Когда поток выполняется, я хочу вызвать метод моего Activity
.
Как это реализовать? Мне нужен результат запроса http в моем Activity
, но я не могу справиться с этим до сих пор.
Это код для выполнения этой задачи резьбы ...
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
либо используйте имя вашей деятельности вместо функции Activity в PostRequest только для операции с типом действия типа. –
@DheereshSingh, спасибо, я думал, что приведение типов к активности должно быть достаточно, но вы правы, это должно быть приписывается реальному классу активности. – antongorodezkiy