几个坑先摆上:
- url(“http://192.168.5.107:8080/users/test?test=ad”)//请求接口,如果需要传参就拼接到后面,这里ip地址需要填真实ip不可用localhost
- android3.0版本开始就强制程序不能在主线程中访问网络,要把访问网络放在独立的线程中。否则报NetworkOnMainThreadException
- Android默认使用https协议,要使用http协议属于明文传输,需要在AndroidManifest.xml的application中添加属性: android:usesCleartextTraffic=“true”
- 网络权限:<uses-permission android:name=“android.permission.INTERNET” />
<uses-permission android:name=“android.permission.ACCESS_WIFI_STATE”/>
<uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE”/>
Android之NetworkOnMainThreadException异常
控制器层
添加一个测试地址,一个参数test,所以要访问的地址就是 http://192.168.5.107:8080/users/test?test=ad (ip写真实IP地址)
package com.sdxzt.xueliang.controller;
import com.sdxzt.xueliang.entity.User;
import com.sdxzt.xueliang.service.IUserService;
import com.sdxzt.xueliang.util.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 控制层
* @Author: Jacob
* @Date: 2019/9/3 11:18
*/
@RequestMapping("users")
@RestController
public class UserController {
@Autowired
IUserService userService;
//注册
@RequestMapping("reg")
public JsonResult<Void> reg(User user){
System.out.println("UserController.reg():"+user.toString());
JsonResult<Void> jsonResult = new JsonResult<>();
userService.reg(user);
jsonResult.setState(2000);
return jsonResult;
}
//测试
@RequestMapping("test")
public JsonResult<User> test(String test){
System.out.println("UserController.test():"+test);
User user = new User();
user.setRealName("tom");
return new JsonResult<User>(2000,"abvc",user);
}
}
Android端
两种请求方式,一种是使用OkHttp,另一种是原生的
得到的响应是json格式,要解析还需要gson
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("setOnClickListener", "点击注册");
getEditText();
new Thread(new Runnable() {
@Override
public void run() {
Log.d("setOnClickListener", "启动线程");
//使用OkHttp
try {
final OkHttpClient client = new OkHttpClient();//创建
final Request request = new Request.Builder()
.url("http://192.168.5.107:8080/users/test?test=ad")//请求接口,如果需要传参就拼接到后面,这里ip地址需要填真实ip不可用localhost
.build();
//android3.0版本开始就强制程序不能在主线程中访问网络,要把访问网络放在独立的线程中。否则报错NetworkOnMainThreadException
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {//状态码是2开头的表示响应成功,如200;
Log.d("response.isSuccessful", "response.code()==" + response.code());//response.code()==200
Log.d("response.isSuccessful", "response.message()==" + response.message());
Log.d("response.isSuccessful", "res==" + response.body().string());//res=={"state":2000,"message":null,"data":null}
//此时的代码执行在子线程,修改UI的操作请使用handler跳转到UI线程。
}
//Log.d("!response.isSuccessful", "res==" + response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
// 下面是另一种写法
// HttpURLConnection connection = null;
// BufferedReader reader = null;
// try {
// URL url = new URL("http://192.168.5.107:8080/users/test?test=ad");
// connection = (HttpURLConnection) url.openConnection();
// connection.setRequestMethod("GET");
// connection.setConnectTimeout(8000);
// connection.setReadTimeout(8000);
// InputStream in = connection.getInputStream();
// //对获取到的输入流进行读取
// reader = new BufferedReader(new InputStreamReader(in));
// StringBuilder response = new StringBuilder();
// String line;
// while ((line = reader.readLine()) != null){
// response.append(line);
// }
// System.out.println(response.toString());
// } catch (Exception e) {
// e.printStackTrace();
// }finally {
// if (reader != null){
// try {
// reader.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// if (connection != null){
// connection.disconnect();
// }
// }
}
}).start();
}
});
结果:
2019-09-04 14:57:52.938 6502-12404/com.sdxzt.xueliangapp_v2 D/response.isSuccessful: response.code()==200
2019-09-04 14:57:52.938 6502-12404/com.sdxzt.xueliangapp_v2 D/response.isSuccessful: response.message()==
2019-09-04 14:57:52.939 6502-12404/com.sdxzt.xueliangapp_v2 D/response.isSuccessful: res=={“state”:2000,“message”:“abvc”,“data”:{“createdUser”:null,“createdTime”:null,“modifiedUser”:null,“modifiedTime”:null,“uid”:null,“realName”:“tom”,“password”:null,“salt”:null,“gender”:null,“phone”:null,“emergencyPhone”:null,“dept”:null,“profession”:null,“card”:null,“address”:null}}