安卓okhttp3與伺服器通過json數據交互解析與上傳
首先是安卓端,我主要上傳一個User對象,下面是安卓端的代碼通過okhttp3,gson編譯成json格式上傳
需要引用
compile "com.google.code.gson:gson:2.8.1"
下面是客戶端的一個功能的代碼,主要將對象User上傳給伺服器,其中通過bundle將返回的對象傳入到別的activity。本來想刪除的,但是對於初學者應該還是很實用,gson.toJson()這個方法就是將user對象編譯成json格式的字元串,方便上傳給伺服器
[html] view plain copy
- /**
- * 發送post請求
- */
- public User user = new User();
- public void postRequest(){
- OkHttpClient client = new OkHttpClient();
- user.setUsername(username.getText().toString());
- user.setPassword(content.getText().toString());
- Gson gson = new Gson();
- //使用Gson將對象轉換為json字元串
- String json = gson.toJson(user);
- RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8")
- , json);
- Request request = new Request.Builder()
- .url(httpURL+"/HttpWeb/LoginServlet")//請求的url
- .post(requestBody)
- .build();
- Call call = client.newCall(request);
- call.enqueue(new Callback() {
- @Override
- public void onFailure(Call call, IOException e) {
- }
- @Override
- public void onResponse(Call call, Response response) throws IOException {
- final String res = response.body().string();
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- resultTV.setText(res);
- Log.v("Main.ID=",res);
- if (!res.equals(null)){
- Toast.makeText(Main.this,"登陸成功",Toast.LENGTH_SHORT).show();
- user.setId(res);
- Intent intent = new Intent();
- intent.setClass(Main.this,MainActivity.class);//跳轉到載入界面
- Bundle bundle = new Bundle();
- bundle.putParcelable("user", user);
- intent.putExtras(bundle);
- startActivity(intent);
- }else{
- Toast.makeText(Main.this,"登陸失敗",Toast.LENGTH_SHORT).show();
- }
- }
- });
- }
- });
- }
User表,其中實現介面Parcelable是為了讓bundle可以傳遞這個對象,使用bundle.putParcelable()這個辦法
[html] view plain copy
- import android.os.Parcel;
- import android.os.Parcelable;
- import java.io.Serializable;
- /**
- * Created by acer1 on 2018/4/5.
- */
- public class User implements Parcelable,Serializable{
- private String id;
- private String username;
- private String password;
- private String Nickname;
- private String Individuality_signature;
- public User(Parcel in) {
- id = in.readString();
- username = in.readString();
- password = in.readString();
- }
- public static final Creator
<User>
CREATOR = new Creator
<User>
() { - @Override
- public User createFromParcel(Parcel in) {
- return new User(in);
- }
- @Override
- public User[] newArray(int size) {
- return new User[size];
- }
- };
- public User() {
- }
- public String getNickname() {
- return Nickname;
- }
- public void setNickname(String nickname) {
- Nickname = nickname;
- }
- public String getIndividuality_signature() {
- return Individuality_signature;
- }
- public void setIndividuality_signature(String individuality_signature) {
- Individuality_signature = individuality_signature;
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- 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;
- }
- @Override
- public int describeContents() {
- return 0;
- }
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeString(id);
- dest.writeString(username);
- dest.writeString(password);
- }
- }
現在客戶端基本就完事了,下面是伺服器的代碼,我開始學的時候就主要想學怎麼接收json格式的數據,我相信大家也是想學怎麼接收json數據格式的數據,通過gson將接收的數據解析成對象,看代碼。我們還要在伺服器裡面寫一個javabean,讓json數據映射成這個javabean,方便提取數據
首先我們導入一些包,讓我們可以接收到json數據
[html] view plain copy
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- response.setContentType("application/json");
- response.setCharacterEncoding("UTF-8");
- request.setCharacterEncoding("UTF-8");
- /**
- * 接收json
- */
- BufferedReader reader = request.getReader();
- String json = reader.readLine();
- System.out.println(json);
- Gson gson =new Gson();
- User user = gson.fromJson(json, User.class);
- System.out.println(user.getUsername());
- System.out.println(user.getPassword());
- PrintWriter out = response.getWriter();
- Integer msg;
- try {
- msg = UserDao.selectUser(user);
- out.print(msg);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- reader.close();
- }
其中提取json數據和解析的代碼就是下面這段代碼
[html] view plain copy
- response.setContentType("application/json");
- response.setCharacterEncoding("UTF-8");
- request.setCharacterEncoding("UTF-8");
- /**
- * 接收json
- */
- BufferedReader reader = request.getReader();
- String json = reader.readLine();
- System.out.println(json);
- Gson gson =new Gson();
- User user = gson.fromJson(json, User.class);
- System.out.println(user.getUsername());
- System.out.println(user.getPassword());
然後就是伺服器端的javabean
[html] view plain copy
- public class User {
- private String id;
- private String username;
- private String password;
- private String Nickname;
- private String Individuality_signature;
- public String getNickname() {
- return Nickname;
- }
- public void setNickname(String nickname) {
- Nickname = nickname;
- }
- public String getIndividuality_signature() {
- return Individuality_signature;
- }
- public void setIndividuality_signature(String individuality_signature) {
- Individuality_signature = individuality_signature;
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- 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;
- }
- }
到這裡基本的過程就結束了,從安卓端上傳json數據到伺服器端解析json數據,將json數據解析成javabean對象。不知道對初學者有沒有幫助,又不懂的可以直接@我,
※json與protobuf的速度之爭
※基於SSM架構的網路租車系統
TAG:程序員小新人學習 |