使用AsyncTask在哪里可以找到http返回的数据,android网络连接
Where to find http returned data using AsyncTask, android network connection
我直接使用 developer.android.com 中的代码来阅读网站,但我不明白如何在 myClickHandler
方法中访问数据。该程序可以正常运行并抓取数据,但我只能在 DownloadWebpageTask
class 中看到它。这是代码部分:
那么我可以在 myClickHandler
的什么地方访问 onPostExecute
生成的数据?感谢您的帮助。
public class HttpExampleActivity extends Activity {
private static final String DEBUG_TAG = "HttpExample";
private EditText urlText;
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
urlText = (EditText) findViewById(R.id.myUrl);
textView = (TextView) findViewById(R.id.myText);
}
public void myClickHandler(View view) {
// Gets the URL from the UI's text field.
String stringUrl = urlText.getText().toString();
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
new DownloadWebpageTask().execute(stringUrl);
} else {
textView.setText("No network connection available.");
}
}
private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
// params comes from the execute() call: params[0] is the url.
try {
return downloadUrl(urls[0]);
} catch (IOException e) {
return "Unable to retrieve web page. URL may be invalid.";
}
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
textView.setText(result);
}
}
...
}
访问此处:http://developer.android.com/reference/android/os/AsyncTask.html 了解有关异步任务的更多信息。
关于您的问题:我可以访问 onPostExecute 产生的数据吗?
答:是的,您可以访问 onPostExecute,因为它在 doInBackground.
之后在 UI 线程上运行
onPostExecute 是否必须等待doInBackground 完成?
答:是
AsyncTask 有四个步骤:
- doInBackground:执行长 运行 操作的代码进入此方法。单击按钮时执行 onClick 方法时,它会调用 execute 方法
它接受参数并使用传递的参数自动调用 doInBackground 方法。
- onPostExecute:doInBackground方法处理完成后调用该方法。 doInBackground 的结果传递给此方法。
onPreExecute:在调用doInBackground方法之前调用此方法。
onProgressUpdate:通过从 doInBackground 调用此方法的任何时候调用 publishProgress 来调用此方法
我直接使用 developer.android.com 中的代码来阅读网站,但我不明白如何在 myClickHandler
方法中访问数据。该程序可以正常运行并抓取数据,但我只能在 DownloadWebpageTask
class 中看到它。这是代码部分:
那么我可以在 myClickHandler
的什么地方访问 onPostExecute
生成的数据?感谢您的帮助。
public class HttpExampleActivity extends Activity {
private static final String DEBUG_TAG = "HttpExample";
private EditText urlText;
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
urlText = (EditText) findViewById(R.id.myUrl);
textView = (TextView) findViewById(R.id.myText);
}
public void myClickHandler(View view) {
// Gets the URL from the UI's text field.
String stringUrl = urlText.getText().toString();
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
new DownloadWebpageTask().execute(stringUrl);
} else {
textView.setText("No network connection available.");
}
}
private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
// params comes from the execute() call: params[0] is the url.
try {
return downloadUrl(urls[0]);
} catch (IOException e) {
return "Unable to retrieve web page. URL may be invalid.";
}
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
textView.setText(result);
}
}
...
}
访问此处:http://developer.android.com/reference/android/os/AsyncTask.html 了解有关异步任务的更多信息。
关于您的问题:我可以访问 onPostExecute 产生的数据吗? 答:是的,您可以访问 onPostExecute,因为它在 doInBackground.
之后在 UI 线程上运行onPostExecute 是否必须等待doInBackground 完成? 答:是
AsyncTask 有四个步骤:
- doInBackground:执行长 运行 操作的代码进入此方法。单击按钮时执行 onClick 方法时,它会调用 execute 方法 它接受参数并使用传递的参数自动调用 doInBackground 方法。
- onPostExecute:doInBackground方法处理完成后调用该方法。 doInBackground 的结果传递给此方法。
onPreExecute:在调用doInBackground方法之前调用此方法。
onProgressUpdate:通过从 doInBackground 调用此方法的任何时候调用 publishProgress 来调用此方法