幾個坑先擺上:
- 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}}