美文网首页
android开发笔记:使用okhttp框架发起网络请求与使用g

android开发笔记:使用okhttp框架发起网络请求与使用g

作者: 猫留下你走吧 | 来源:发表于2017-09-28 01:04 被阅读69次

    前言

    网络请求是每一个app必定存在的功能,本教程教你看懂接口文档并使用okhttp框架发起网络请求向服务器请求数据并解析返回数据。

    提示

    本教程用的是java后台,开始的配置比想象的麻烦,想速成推荐使用php后台,学习可以查看一些关于php的mysqli函数的使用,获取数据库数据最后以json形式返回。但是多人开发一般是有人写后台,并提供你一个接口文档

    接口文档怎么看?

    例子:
    ————————————————

    接口名称

    获取用户基础信息API

    1) 请求地址

    http://www.hellomiao.cn:8080/API/mobile/main/getUserInfoByUserId

    2) 调用方式:HTTP post
    3) 接口描述:
    • 接口描述详情
    4) 请求参数:
    POST参数:
    字段名称 字段说明 类型 必填 备注
    userId 账号 string Y -

    5) 请求返回结果:

    {
        "msg": "用户信息获取成功",
        "companyId": null,
        "phone": null,
        "userType": 4,
        "userId": "1072844432@qq.com",
        "status": 1
    }
    
    6) 请求返回结果参数说明:
    字段名称 字段说明 类型 必填 备注
    msg 服务器返回信息 string Y -
    companyId 加入/注册公司的id string Y -
    phone 电话 string Y -
    userType 用户类型 string Y -
    userId 账号 string Y -
    status 状态码 string Y -

    ————————————————
    浏览该文档,我们大致就要知道发起网络请求的最基本的信息是:

    • 接口作用(不必多说)
    • 接口地址
    • 请求方式 psot
    • 传入参数 userId
    • 接收参数 msg/companyId/phone/userType/userId/status
      都获取到以上信息后,我们就可以用该接口去发起网络请求了

    准备工作1 —— 安装框架

    build.gradle中添加:

        compile 'com.squareup.okhttp3:okhttp:3.2.0'
        compile 'com.squareup.okio:okio:1.7.0'
        compile 'com.google.code.gson:gson:2.7'
    

    然后再点击右上角的 sync onw 导入到项目中

    屏幕快照 2017-09-28 上午12.33.59.png

    准备工作2 —— 为app添加网络权限

    没有添加权限是不让发起网络请求的,因此需要添加网络连接权限:
    打开AndroidManifest.xml,在<manifest></manifest>之间添加一句:

    <uses-permission android:name="android.permission.INTERNET"/>
    
    屏幕快照 2017-09-28 上午12.39.14.png

    准备工作3 —— 创建的实体类

    实体类创建的作用有两个:

    • 作为对象,其属性是到处用得到,不必多说
    • 为我们json转对象做准备
      User.java
    package cn.hellomiao.www.networkdemo.entity;
    
    /**
    * Created by liwenban on 2017/9/28.
    */
    
    public class User {
    
       private int status;
       private String msg;
    
       private String accountId;
       private String password;
       private String phone;
       private int userType;
       private String companyId;
    
       //默认构造方法 User user = new User();
       public User(){
           
       }
    
       //构造方法一 User user = new User("","",...);
       public User(int status, String msg, String accountId, String password, String phone, int userType, String companyId) {
           this.status = status;
           this.msg = msg;
           this.accountId = accountId;
           this.password = password;
           this.phone = phone;
           this.userType = userType;
           this.companyId = companyId;
       }
    
       public int getStatus() {
           return status;
       }
    
       public void setStatus(int status) {
           this.status = status;
       }
    
       public String getMsg() {
           return msg;
       }
    
       public void setMsg(String msg) {
           this.msg = msg;
       }
    
       public String getAccountId() {
           return accountId;
       }
    
       public void setAccountId(String accountId) {
           this.accountId = accountId;
       }
    
       public String getPassword() {
           return password;
       }
    
       public void setPassword(String password) {
           this.password = password;
       }
    
       public String getPhone() {
           return phone;
       }
    
       public void setPhone(String phone) {
           this.phone = phone;
       }
    
       public int getUserType() {
           return userType;
       }
    
       public void setUserType(int userType) {
           this.userType = userType;
       }
    
       public String getCompanyId() {
           return companyId;
       }
    
       public void setCompanyId(String companyId) {
           this.companyId = companyId;
       }
       
       
    }
    

    如果实体类不懂是什么,要好好补补java了。get和set方法,构造方法是实体类最基本的东西,都是有快捷键的,自行百度,方便开发

    屏幕快照 2017-09-28 上午12.44.12.png

    大招准备 —— 网络请求

    package cn.hellomiao.www.networkdemo;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.Toast;
    
    import com.google.gson.Gson;
    
    import java.io.IOException;
    
    import cn.hellomiao.www.networkdemo.entity.User;
    import okhttp3.Call;
    import okhttp3.Callback;
    import okhttp3.FormBody;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.RequestBody;
    import okhttp3.Response;
    
    public class LoginActivity extends AppCompatActivity {
    
        //创建实体类对象user
        private User user;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            getUser();
        }
    
        public void getUser(){
    
            //创建请求客户端
            OkHttpClient mOkHttpClient=new OkHttpClient();
            //创建请求体(传入参数)
            RequestBody formBody = new FormBody.Builder()
                    //模拟传入一个参数,实际可以获取用户输入
                    .add("accountId", "1072844432@qq.com")
                    .build();
    
            //创建请求
            Request request = new Request.Builder()
                    //接口地址
                    .url("http://www.hellomiao.cn:8080/API/mobile/main/getUserInfoByUserId")
                    //post方式发送请求体
                    .post(formBody)
                    .build();
    
            //创建响应
            Call call = mOkHttpClient.newCall(request);
            //异步方式接收反馈(同步占用主线程,会容易阻塞线程,不推荐使用)
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    //请求失败执行这里
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    //执行成功执行这里
    
                    //将返回数据转成String格式
                    String str = response.body().string();
                    //创建gson对象
                    Gson gson = new Gson();
                    //将gson会自动把json数据里面的键值对和user里面的属性匹配并付值
                    user = gson.fromJson(str,User.class);
    
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            //可以验证以下消息
                            Toast.makeText(getApplicationContext(), "请求成功:" + user.getMsg(), Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            });
        }
    
    }
    

    说明:原本是提供登录接口给大家演示,为了保证数据安全,所以又改成获取用户信息,所以不要介意LoginActivity

    相关文章

      网友评论

          本文标题:android开发笔记:使用okhttp框架发起网络请求与使用g

          本文链接:https://www.haomeiwen.com/subject/jykuextx.html