Android Studio访问Http资源之Okhttp

OkHttp-支持SPDY协议的高效HTTP库

okhttp官网 点此进入

项目源码 https://gitee.com/ssszs/OkHttpDemo.git

1.了解Okhttp

  HttpURLConnection和HttpClient ,虽然两者都支持HTTPS ,流的上传和下载,配置超时, IPV6和连接池,已足够满足我们各种HTTP请求的需求。但更高效的使用HTTP可以让我们的应用运行更快、更节省流量。而OkHttp库就是为此而生。

  OkHttp是一个高效的HTTP库:

  1. 支持SPDY,共享同一个Socket来处理同一个服务器的所有请求

  2. 如果SPDY不可用,则通过连接池来减少请求延时

  3. 无缝的支持GZIP来减少数据流量

  4. 缓存响应数据来减少重复的网络请求

  5. 会从很多常用的连接问题中自动恢复。如果服务器配置了多个IP地址,当第一个IP连接失败的时候, OkHttp会自动尝试下一个IP。

  6. OkHttp还处理 了代理服务器问题和SSL握手失败问题。

  7. 使用OkHttp无需重写程序中的网络代码。OkHttp实现了几乎和HttpURLConnection-样的API。如果用了HttpClient ,则OkHttp也提供了一个对应的okhttp-apache模块。

  OkHttp是一个相对成熟的解决方案 ,并且Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。
  所以我们更有理由相信OkHttp的强大。

2.程序

此程序是通过get方式与post方式访问一个接口来获取接口的信息。

接口地址 http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=手机号

1.在build.gradle文件中加入依赖

implementation 'com.squareup.okhttp3:okhttp:4.4.0'

2.AndroidManifest.xml添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

3.在AndroidMainfest.xml的application标签内添加

android:usesCleartextTraffic="true"

4.MainActivity.java代码,xml就不放了,两个button

public class MainActivity extends AppCompatActivity {

    private Button btn1;
    private Button btn2;

    private String urlAddressFront = "http://tcc.taobao.com";
    private String urlAddressMethod = "/cc/json/mobile_tel_segment.htm";

    private OkHttpClient okHttpClient;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn1 = (Button) findViewById(R.id.btn_get);
        btn2 = (Button) findViewById(R.id.btn_post);

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                doGet("19999999999");
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                doPost("18888888888");
            }
        });

        okHttpClient = new OkHttpClient();      //okHttpClient的初始化
    }

    //doPost,通过构造请求参数
    private void doPost(final String s) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                FormBody formBody = new FormBody.Builder().add("tel",s).build();        //参数是键值对,如("username","张三")
                Request request = new Request.Builder().url(urlAddressFront + urlAddressMethod).post(formBody).build();     //完整请求
                //准备发送请求   这里使用异步请求
                okHttpClient.newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(@NotNull Call call, @NotNull IOException e) {
                        Log.d("TAGPOST","failed");
                    }

                    @Override
                    public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                        Log.d("TAGPOST",response.body().string());
                    }
                });
            }
        }).start();
    }

    //doGet,通过拼接url
    private void doGet(String s) {
        final String urlAddress = urlAddressFront + urlAddressMethod + "?tel=" + s;     //拼接出完整的url
        new Thread(new Runnable() {
            @Override
            public void run() {
                //先生成一个Request请求
                Request request = new Request.Builder().url(urlAddress).build();
                //准备发送请求   okhttp请求有两种:同步请求和异步请求,这里使用同步请求
                try {
                    Response response = okHttpClient.newCall(request).execute();               //发送请求并返回response,存到response中
                    if(response.isSuccessful()){
                        Log.d("TAGGET",response.body().string());
                    }else {
                        Log.d("TAGGET","failed");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

3.更多

关于Okhttp,更详细请见大佬博客

Android OkHttp完全解析 是时候来了解OkHttp了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android Studio中实现一个物流管理系统,通常会涉及到以下几个步骤和关键技术: 1. **项目结构**:首先,你需要设置好项目的架构,可能包括UI层(Activity/Fragment)、业务逻辑层(Service/Repository)和数据访问层(数据库或API接口)。 2. **UI设计**:使用Material Design风格,创建主界面显示订单列表、跟踪信息、寄件人/收件人信息等,并添加相应的控件如RecyclerView、EditText等。 3. **数据管理**:利用SQLite或Room等本地持久化技术存储订单数据,同时集成API调用,获取实时的物流更新信息。 4. **网络请求**:使用Retrofit、OkHttp或Volley进行网络请求,处理API认证、请求和响应处理。 5. **业务逻辑**:编写服务(Service)来处理订单操作,如下单、查询状态、更新信息等。使用观察者模式(LiveData/Observer)或协程(Kotlin Coroutines)处理异步操作和状态变化。 6. **通知和权限**:当有新的物流更新时,使用Notification或Firebase Cloud Messaging发送通知给用户。确保获取和管理地理位置权限。 7. **测试与调试**:使用JUnit和Espresso等工具编写单元测试和UI测试,确保应用的稳定性和功能正确性。 8. **用户体验**:考虑性能优化,如缓存策略、异步加载等,提供良好的用户交互体验。 **相关问题**: 1. Android Studio中如何设计清晰的界面结构来展示物流信息? 2. 如何在Android Studio中集成RESTful API进行数据交互? 3. 如何在Android Studio中实现后台服务来处理订单状态更新? 4. 为什么要在物流管理系统中使用观察者模式,而不是直接回调?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kpacnB_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值