Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.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/AndroidWebRequesting_Java_Android_Jsoup - Fatal编程技术网

Java/AndroidWebRequesting

Java/AndroidWebRequesting,java,android,jsoup,Java,Android,Jsoup,我被告知使用异步任务。但我想知道。是否可以在普通函数中发出webrequest?现在我需要一直使用这样的代码块: private static HashMap<String, String> retrn = new HashMap<String,String>(); private static class Web extends AsyncTask<String, String, Connection.Response> { p

我被告知使用异步任务。但我想知道。是否可以在普通函数中发出webrequest?现在我需要一直使用这样的代码块:

   private static HashMap<String, String> retrn = new HashMap<String,String>();
    private static class Web extends AsyncTask<String, String, Connection.Response> {
        protected Connection.Response doInBackground(String... modefiers) {
            Connection.Response res = null;
            ArrayList<String> ModList = ToAr(modefiers);
            ModList.remove(modefiers[0]);
            try {
                res = Jsoup.connect(modefiers[0])
                        .data(ModList.toArray(new String[ModList.size()]))
                        .method(Connection.Method.POST)
                        .execute();
                Document doc = res.parse();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return res;
        }

        protected void onPostExecute(Connection.Response result) {
            retrn.put(result.url().toString(), result.body());
        }
    }

    private static ArrayList ToAr(Object... listr){
        ArrayList Ar = new ArrayList();
        for (Object ari : listr){
            Ar.add(ari);
        }
        return Ar;
    }
private static HashMap retrn=new HashMap();
私有静态类Web扩展异步任务{
受保护的连接。响应doInBackground(字符串…调制解调器){
Connection.Response res=null;
ArrayList ModList=ToAr(调制解调器);
ModList.remove(modefiers[0]);
试一试{
res=Jsoup.connect(调制解调器[0])
.data(ModList.toArray(新字符串[ModList.size()]))
.method(Connection.method.POST)
.execute();
Document doc=res.parse();
}捕获(例外e){
e、 printStackTrace();
}
返回res;
}
受保护的void onPostExecute(Connection.Response结果){
retrn.put(result.url().toString(),result.body());
}
}
专用静态ArrayList ToAr(对象…列表器){
ArrayList Ar=新的ArrayList();
for(对象ari:listr){
Ar.add(ari);
}
返回Ar;
}

您可以使用不同类型的解决方案来运行请求。不过,请记住,您的调用应该是异步的,以避免冻结UI和获取NetworkOnMainThreadException。因此,作为原始响应,不应该在“正常函数”中运行webrequests。其他解决方案将是

  • 装载机
  • RxJava
  • 经典线
但是异步任务是一种很好且更简单的工作方式。为避免重写此类代码块,请定义单独的类而不是内部类:

MyAsynctask.java:

public class MyAsyncTask extends AsyncTask<String, String, Connection.Response> {
//you code...
}
公共类MyAsyncTask扩展了AsyncTask{
//你的代码。。。
}

因此,无法仅使用诸如:getwebcontent(字符串url)之类的函数?如果您这样做,而没有异步性(只是一个“正常”方法),您将获得NetworkOnMainThread异常。此外,它是一种反模式。所以,不。