Java 在何处使用AsyncTask、android网络连接查找http返回的数据
我直接使用代码来阅读网站,但我不知道如何在Java 在何处使用AsyncTask、android网络连接查找http返回的数据,java,android,android-asynctask,Java,Android,Android Asynctask,我直接使用代码来阅读网站,但我不知道如何在myClickHandler方法中访问数据。该程序工作正常,可以很好地获取数据,但我只能在DownloadWebpageTask类中看到它。下面是代码部分: 那么在myClickHandler中的什么地方可以访问postExecute生成的数据呢?谢谢你的帮助 public class HttpExampleActivity extends Activity { private static final String DEBUG_TAG = "HttpE
myClickHandler
方法中访问数据。该程序工作正常,可以很好地获取数据,但我只能在DownloadWebpageTask
类中看到它。下面是代码部分:
那么在myClickHandler
中的什么地方可以访问postExecute生成的数据呢?谢谢你的帮助
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);
}
}
...
公共类HttpExampleActivity扩展活动{
私有静态最终字符串DEBUG_TAG=“HttpExample”;
私人编辑文本;
私有文本视图文本视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
urlText=(EditText)findViewById(R.id.myUrl);
textView=(textView)findViewById(R.id.myText);
}
公共作废myClickHandler(视图){
//从UI的文本字段获取URL。
字符串stringUrl=urlText.getText().toString();
ConnectivityManager connMgr=(ConnectivityManager)
getSystemService(Context.CONNECTIVITY\u服务);
NetworkInfo NetworkInfo=connMgr.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected()){
新建下载WebPagetAsk().execute(stringUrl);
}否则{
setText(“没有可用的网络连接”);
}
}
私有类下载WebPagetTask扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…URL){
//params来自execute()调用:params[0]是url。
试一试{
返回下载URL(URL[0]);
}捕获(IOE异常){
return“无法检索网页。URL可能无效。”;
}
}
//onPostExecute显示异步任务的结果。
@凌驾
受保护的void onPostExecute(字符串结果){
setText(结果);
}
}
...
}访问此处:阅读有关异步任务的更多信息
对于您的问题:我可以访问PostExecute上的数据吗?
Ans:是的,您可以访问onPostExecute,因为它在UI线程上运行
onPostExecute是否必须等待doInBackground完成?
答:是的
AsyncTask有四个步骤:
为什么要使用myClickHandler方法访问数据?因为您可以在
onPostExecute
中执行您想在myClickHandler
中执行的相同任务,所以doInBackground在另一个线程中执行,onPostExecute在UI线程中执行,并可以访问任务的结果(字符串结果)我只想知道如何使用与创建下载WebPagetAsk
相同的方法访问数据。看起来我应该可以,但我不知道怎么做。谢谢onPostExecute
是否必须等待doInBackground
完成?