OkHttp框架的应用

通过OkHttp实现基本的GET,POST等相关的请求:

OkHttp使用一般分为四个步骤:以Get请求为例

/**
     * 1.拿到okHttpClient对象
     * 2.构造Request
     * 3.将Request封装为Call
     * 4.执行Call
     */

我们写的Get请求方法:

public void doGet(View view) throws IOException {
        //构造OkHttpClient
        OkHttpClient okHttpClient = new OkHttpClient();
        //构造Request
        Request request = new Request.Builder()
                .get()
                .url(mBaseUrl + "login?username=get&password=12223")
                .build();
        //执行Call
        executeRequest(request);
    }
其中对3,4步骤封装在了executeRequest方法中 ,具体如下:

private void executeRequest(Request request) {
        Call call = okHttpClient.newCall(request);
        //Response execute = call.execute();
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
                L.e("onFailure:" + e.getMessage());
                e.printStackTrace();
            }

            @Override
            public void onResponse(Response response) throws IOException {
                L.e("onResponse");
                final String res = response.body().string();
                L.e(res);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tv.setText(res);
                    }
                });
            }

        });
    }

先建立Call对象,执行Call.execute或Call.enqueue方法。


这里要注意的是onResponse方法其实是工作在子线程中。

这里mBaseUrl

private String mBaseUrl = "http://本机ip地址/Okhttp/"

url格式如下:

url(mBaseUrl + "login?username=get&password=12223")


Okhttp为我们服务器的项目名,login为服务器端的方法名,username和password为参数。这样我们就可以完成前后端的交互。

我们在服务端需要建立Okhttp的Web Project,同时搭建本地服务器,具体的搭建方式如下:搭建服务器Tomcat

我们建立UserAction的java源文件


建立login方法

	public String login() throws IOException{
		System.out.println(username + " , " +password);
		HttpServletResponse response = ServletActionContext.getResponse();
		PrintWriter writer = response.getWriter();
		writer.write("login success");
		writer.flush();
		return null;
	}
得到Response对象来与客户端交互,在writer中写入了login success,那么在客户端的executeRequest的onResponse回调方法()中得到Response对象,并将login success显示在TextView中。

服务端写完login方法后还要在struts.xml中声明一下:


重启服务器,并运行AndroidStudio代码:

login success便显示在了TextView中。

其他的一些方法大体步骤相同,比如PostFile方法是将一个文件上传到服务器端

public void doPostFile(View view) {
        //得到外存图片文件
        File file = new File(Environment.getExternalStorageDirectory(), "shaozuo.jpg");
        if (!file.exists()) {
            L.e(file.getAbsolutePath() + "not exist! ");
            return;
        }
        L.e("find pic");
        //构造RequstBody
        RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg"),
                file);
        //构造Request
        Request request = new Request.Builder()
                .url(mBaseUrl + "postFile")
                .post(requestBody)
                .build();
        executeRequest(request);
    }
这里我们在构造Request时,需要构造RequestBody,一般Post请求时都要构造RequestBody,构造RequestBody时,需要传入文件的MIME type参数。

服务器端的代码如下:

public String postFile() throws IOException{
		HttpServletRequest request = ServletActionContext.getRequest();
		ServletInputStream is = request.getInputStream();
		String dir = ServletActionContext.getServletContext().getRealPath("files");
		File file = new File(dir, "shaozuo.jpg");
		FileOutputStream fos = new FileOutputStream(file);
		byte[] buf = new byte[1024];
		int len = 0;
		while( (len = is.read(buf)) != -1 ){
			fos.write(buf, 0, len);
		}
		fos.flush();
		fos.close();
		return null;
	}
这里服务端接受到的图片就会存放在 dir中,Okhttp\files文件夹下

运行客户端代码,当我们单击POST FILE 按钮时,我们的服务端路径下就会多一张图片,是客户端发送来的。

okhttp的使用方法具体的就是4个步骤

 * 1.拿到okHttpClient对象
 * 2.构造Request
 * 3.将Request封装为Call
 * 4.执行Call

不同请求方法也只是一些具体的细节不同(比如构造RequestBody方法不同。。),就不一一介绍了。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值