Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在何处使用AsyncTask、android网络连接查找http返回的数据_Java_Android_Android Asynctask - Fatal编程技术网

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有四个步骤:

  • doInBackground:执行长时间运行操作的代码在此方法中。当单击按钮执行onClick方法时,它调用execute方法 它接受参数并使用传递的参数自动调用doInBackground方法
  • onPostExecute:在doInBackground方法完成处理后调用此方法。doInBackground的结果将传递给此方法
  • onPreExecute:在调用doInBackground方法之前调用此方法

  • onProgressUpdate:通过从doInBackground随时调用publishProgress调用此方法来调用此方法


  • 为什么要使用myClickHandler方法访问数据?因为您可以在
    onPostExecute
    中执行您想在
    myClickHandler
    中执行的相同任务,所以doInBackground在另一个线程中执行,onPostExecute在UI线程中执行,并可以访问任务的结果(字符串结果)我只想知道如何使用与创建
    下载WebPagetAsk
    相同的方法访问数据。看起来我应该可以,但我不知道怎么做。谢谢
    onPostExecute
    是否必须等待
    doInBackground
    完成?