Android网络框架-OkHttp

Android网络框架-OkHttp的导入和基本使用

一、概述

封装在Volley框架中httpClient在SDK6之后被弃用
在这里插入图片描述
所以间接导致了Volley网络框架的使用出现了麻烦,需要下载httpClient导入成lib包等,很麻烦。所以大家慢慢开始选择使用OKHttp网络访问框架。

二、OKHttp常见用法

一、get请求
在github上搜索okhttp版本,如图

在项目的build.grald文件下的dependencies中添加如下图语句:
在这里插入图片描述

然后点击同步Sync NOW
找到MainActivity的布局文件activity_main,把布局改成线性垂直布局LinearLayout,可以略微调整一下内填充padding。添加一个按钮如图:
在这里插入图片描述
MainActivity文件中的doGet方法中添加如下代码:

	public void doGet(View view)
	{
    
    
		/**全局管理者,拿到okHttpClient对象*/
		OkHttpClient okHttpClient = new OkHttpClient();
		/**通过Builder来创建Request*/
		Request.Builder builder = new Request.Builder();
		/**Request对象*/
		Request request = builder.get().url('链接地址').build();
		/**通信对象,将Request封装为call*/
		Call call = okHttpClient.newCall(request);
		/**回调函数,执行call*/
		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:");
				/**获得回调的一些字符串*/
				String res = response.body().string();
				/**注意这里的onResponse仍然是在子线程中进行的,如果要在UI线程中修改某项的值,需要用以下方法*/
				runOnUiThread(new Runnable()
				{
    
    
					@Override
					public void run()
					{
    
    
						
					}
				});
				L.e(res);
			}
		});
	}

上面的L.e是创建一个的L类用来抛出异常:

public class L {
    
    
    private static final String TAG ="";
    private static boolean debug = true;

    public static void e(String msg){
    
    
        if (debug){
    
    
            Log.e(TAG, msg);
        }
    }
}

在AndroidManifest.xml中添加网络权限(与application同级):

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

打开模拟器,运行之后点击get按钮得到以下运行结果:
在这里插入图片描述

三、IDEA的Tomcat服务器搭建来进一步体验OkHttp的使用

Web项目创建及Tomcat的配置
下载Struts2_2.3.37版本
3.1 创建好项目后,将图中画横线的struts2中的包解压
在这里插入图片描述
并将其中的jar包复制到web项目的lib目录下:
在这里插入图片描述
记得右键把他们增加到library里。
将下图文件
在这里插入图片描述

中的两句话

<filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

复制到项目的web.xml中:
在这里插入图片描述
将下图文件中的Struts文件复制到src目录下
在这里插入图片描述
把两个标签间的内容都删掉:
在这里插入图片描述
重点感性认识
在src目录下创建一个类TestAction,代码如下:

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class TestAction extends ActionSupport {
    
    
    private String username;
    private String password;
    public  String login() throws IOException {
    
    
        System.out.println(username+" , "+password);
        HttpServletResponse response = ServletActionContext.getResponse();
        PrintWriter writer = response.getWriter();
        writer.write("success!");
        writer.flush();
        return null;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public String getPassword() {
    
    
        return password;
    }

    public void setPassword(String password) {
    
    
        this.password = password;
    }
}

添加如下语句:
在这里插入图片描述
网页中显示则代表语句成功!
在这里插入图片描述
将Android编译器中的MainActivity类里的request对象的url链接信息改成tomcat的网站url,如下:

Request request = builder.get()
                .url("http://localhost:8080/demo2_war_exploded/"+"test?username=liwenhao&password=123456")
                .build();

其中localhost在cmd中输入ipconfig得到具体的ip之后要做替换,不然它会找不到或者链接不到这个url。
使Android能链接到http这样的明文链接:
系统限制了明文流量的网络请求的解决
重启tomcat、虚拟器,点击get按钮,得到如下图:
服务器端接收数据如图:
在这里插入图片描述

Android机接收数据如图:
在这里插入图片描述

参考文档:
【1】Web项目创建及Tomcat的配置
【2】系统限制了http开头的网络请求的解决
【3】Configure build 下载慢的问题
作者:李文昊
原文链接:https://blog.csdn.net/Impermanent/article/details/112140269

猜你喜欢

转载自blog.csdn.net/fjnu_se/article/details/112170636