http请求


这里我使用第三方库:https://github.com/square/okhttp/

引入方法:implementation("com.squareup.okhttp3:okhttp:4.4.0")

但是引入报错。。。

emm,研究了半天,国外找了好多都无法解决。

刚开始以为是项目的问题在最后才发现是我改了一下项目的文件。。。

太难了我,这个问题困扰了整整一上午。。。

最简单的使用方法:

private void getDataAsync() {
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
            .url("http://www.baidu.com")
            .build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
        }
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            if(response.isSuccessful()){//回调的方法执行在子线程。
                Log.d("kwwl","获取数据成功了");
                Log.d("kwwl","response.code()=="+response.code());
                Log.d("kwwl","response.body().string()=="+response.body().string());
            }
        }
    });
}

上面这个是异步调用方法。

下面看一下同步调用

OkHttpClient client =new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build();
Request request = new Request.Builder().url(url).build();
Call call = client.newCall(request);
try {
	Response response = call.execute();
	Log.d("kwwl","获取数据成功了");
	Log.d("kwwl","response.code()=="+response.code());
	Log.d("kwwl","response.body().string()=="+ Objects.requireNonNull(response.body()).string());
} catch (IOException e) {
	e.printStackTrace();
}
return "";

注意如果报错 android.os.NetworkOnMainThreadException
那是因为http请求不能在主线程中执行。我们需要在子线程中去执行这个请求。

发送post请求

参考链接https://blog.csdn.net/qingfeng812/article/details/52130861

OkHttpClient client=new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build();
Request request=new Request.Builder()
        .url(url)
        .post(formBody)
        .build();
try{
    Response response=client.newCall(request).execute();
    if(response.isSuccessful()){
        String data= Objects.requireNonNull(response.body()).string();
        //使用正则来判断并获取数据
        Matcher type= P1.matcher(data);
        Matcher result= P2 .matcher(data);
        if(type.find() && Objects.equals(type.group(1), ok)){
            if(result.find()){
                return result.group(1);
            }
        }
    }
    return null;
}catch (Exception e){
    Log.e(Variable.TAG, Objects.requireNonNull(e.getMessage()));
    return null;
}

文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录