在AndroidManifest写请求权限代码
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
先写客户端的代码
在你的Android布局文件中创建一个button,如下
<Button
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:text="test"
android:onClick="tset"
android:layout_weight="0.5"
/>
然后在MainActivity中添加test按钮的点击事件
Request.Builder().url(“http://192.168.56.1:8050/demo1_war_exploded/base”).build();
url中写的是你需要传输信息的ip,如果是本地服务器可以在cmd里通过ipconfig查看自己电脑的ip地址
demo1_war_exploded是服务器的项目名,base是我的servlet-name
public void tset(View view) {
Button btn = (Button) findViewById(R.id.test);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder().url("http://192.168.56.1:8050/demo1_war_exploded/base").build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
String error = e.getMessage();
Log.d("error",error);
}
@Override
public void onResponse(Response response) throws IOException {
if(response.isSuccessful()){//回调的方法执行在子线程。
Log.d("kwwl","获取数据成功了");
Log.d("kwwl","response.code()=="+response.code());
Log.d("kwwl","response.body().string()=="+response.body().string());
}
if(response.isSuccessful()){
String json = response.body().toString();
InputStream is = response.body().byteStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int readed = 0;
byte buf[] = new byte[1024];
while ((readed = is.read(buf, 0, buf.length)) != -1) {
bos.write(buf, 0, readed);
}
byte[] result = bos.toByteArray();
Log.e("result","result:"+ new String(result));
is.close();
bos.close();
buf=null;
}
}
});
}
}).start();
}
});
}
然后编写服务器端的代码,我是用的idea写的服务器
新创建一个servlet
然后输入以下代码
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
*/
public class BaseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
handleRequest(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("dopost");
handleRequest(req,resp);
}
private void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8"); // 设置字符集
resp.setCharacterEncoding("UTF-8");
resp.setHeader("Cache-Control", "no-store");
PrintWriter out = resp.getWriter(); // 准备输出
out.println("<html>");
out.println("<head><title>WEB开发</title></head>");
out.println("<body>");
out.println("<h1>Hello World</h1>");
out.println("</body>");
out.println("</html>");
out.close();// 关闭输出
}
}
并在web.xml中添加如下代码
<servlet>
<servlet-name>base</servlet-name>
<servlet-class>BaseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>base</servlet-name>
<url-pattern>/base</url-pattern>
</servlet-mapping>
最后测试一下
出现如下就成功了
注意如果你使用的是Android 9及以上,okhttp是不能访问https的,会直接失败。需要在res/下创建一个xml文件夹,然后创建一个network_security_config.xml添加代码
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
再在AndroidManifest中添加
<application
......
android:networkSecurityConfig="@xml/network_security_config">
</application>
如果测试还是不成功,请查看下手机模拟机的Android版本,跟换模拟机Android9以下就可以
版权声明:本文为m0_43421409原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。