okhttp的get、post请求

okhttp网络请求框架

  这里粗粗介绍一下okhttp:比较完备的网络请求框架。

1、get请求

get请求分同步请求和异步请求两种方式:

get同步请求:

先上代码,这是我的程序代码:

//同步get请求
private void getSync() throws Exception 
    {
        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                try
                {
                    request=new Request.Builder()  //请求对象,设置的参数详细要看源码解释
                            .url(BASE_URL)    //这里的url参数值是自己访问的api
                            .build();         
                    Response response = null;   //建立一个响应对象,一开始置为null
                    Call call = client.newCall(request); //开始申请,发送网络请求。
                    response = call.execute();
                    if (response.isSuccessful()) {

                        Log.d("kwwl", "response.code()==" + response.code());
                        Log.d("kwwl", "response.message()==" + response.message());
                        Log.d("kwwl", "res==" + response.body().string());
//                        text.setText("同步请求成功");
                        //此时的代码执行在子线程,修改UI的操作请使用handler跳转到UI线程。
                    }
                    else
                    {
                        text.setText("同步请求失败");
                        Log.d("Fail","get请求失败");
                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }

            }
        }).start();
    }

  url参数值:详细的书写要看api申请的api书写规定,如我的url规定是:http+key,两者都是在申请api之后会有的数据。

  注意到Call对象是用client.newCall(request)来初始化,也就是说已经发送网络请求了,client就是客户端okhttpClient对象,将请求的结果返回给call,因此call有了响应成功或失败的结果。

  而call.execute()返回的就是response的情况,也就是response类对象,所以接下来就用response.isSuccessful来判断是否请求成功,以决定接下来的动作。

get异步请求:
//异步请求
    public void getAsync() throws Exception
    {

        request=new Request.Builder()
                .url(BASE_URL)
                .build();              
        Call call=client.newCall(request);
        call.enqueue(new Callback() {     //与同步的不同点:Callback
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("TAG",BASE_URL);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                if(response.isSuccessful()){
                    final String result=response.body().string();
                    runOnUiThread(new Runnable() {  //回到UI主线程
                        @Override
                        public void run() {
                            text.setText(result);
                        }
                    });

                }

            }
        });
    }

异步请求和同步请求的代码差不多,关键在于异步请求多了利用Callback类来进行更细致的网络请求分析:
  onFail和onResponse方法:
  在我的理解中,这两者在网络请求的过程中起到的作用是:判断能否把请求发出去,比如,这个网络不接受get请求,那么你用get请求当然就不会成功了,这也是请求失败的一种,但是get异步请求把请求失败(广义)分成两种,能发送与不能发送,能发送成功在来分成能请求成功和因为其他原因的请求失败(狭义);

重点内容:注意到异步请求中有一个方法runOnUiThread(),返回主线程,为什么要返回主线程呢,因为虽然没有像同步请求那样明着写代码说另开一个子线程,但是这里在发送请求时,已经自己开启了一个子线程,所以现在要回到textView文本框中输入,就应该回调主线程。如果没有这个方法,直接setText的话,就会报错啦。

2、post请求:

post请求也分两种,嘻嘻,我也只学了异步请求,跟get的异步很相似

post异步请求:
//post 请求
    private void postAsync() throws Exception
    {
        final String url = " http://apis.haoservice.com/lifeservice/Joke/ContentList?pagesize=10&page=1&key=8b3264c50ab346f39d1b4eac0dd5bc1c";    //我自己请求的api
        RequestBody formBody = new FormBody.Builder()   //创建表单请求体,具体的参数设置也要去看源码才更清楚
                                .add("username","17wwshe")      //自己设的,不要盗用我的名儿!
                                .build();
        request = new Request.Builder()//创建Request 对象。
                .url(url)
                .post(formBody)//传递请求体   //与get的区别在这里
                .build();
        client.newCall(request).enqueue(new Callback()
        {
            @Override
            public void onFailure(Call call, IOException e)
            {
                Log.d("TAG  post失败",url);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException
            {
                if(response.isSuccessful())
                {
                    final  String content=response.body().string();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.e("TAG post成功",content);
                            text.setText(content);
                        }
                    });

                }
                else
                {
                    Log.d("PostFail ",url);
                }
            }
        });

    }
//成功!!

这里面的变量有点多,要仔细看才知道哪里是哪里。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
OkHttp是一个开源的HTTP客户端库,用于在Android应用程序中进行网络请求。它提供了简洁的API,支持同步和异步请求,并具有高效的性能。 在使用OkHttp进行GET请求时,可以按照以下步骤进行操作: 1. 添加OkHttp库依赖:在项目的build.gradle文件中添加以下依赖项: ``` dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.0' } ``` 2. 创建OkHttpClient实例:使用OkHttpClient类创建一个HTTP客户端实例,可以设置一些配置参数,例如连接超时时间、读取超时时间等。 ```java OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .build(); ``` 3. 创建Request对象:使用Request类创建一个HTTP请求对象,指定请求的URL和请求方法(GET、POST等),可以添加一些请求头或请求参数。 ```java String url = "http://example.com/api/data"; Request request = new Request.Builder() .url(url) .get() .build(); ``` 4. 发送请求并获取响应:使用OkHttpClient的newCall方法发送请求,并通过Response对象获取服务器的响应结果。 ```java try { Response response = client.newCall(request).execute(); if (response.isSuccessful()) { String responseData = response.body().string(); // 处理响应数据 } else { // 处理请求失败情况 } } catch (IOException e) { e.printStackTrace(); } ``` 以上就是使用OkHttp进行GET请求的基本步骤。当然,还可以根据具体需求添加其他功能,例如设置请求头、请求参数、处理响应数据等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值