當前位置:
首頁 > 知識 > 安卓okhttp3與伺服器通過json數據交互解析與上傳

安卓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

  1. /**
  2. * 發送post請求
  3. */
  4. public User user = new User();
  5. public void postRequest(){
  6. OkHttpClient client = new OkHttpClient();
  7. user.setUsername(username.getText().toString());
  8. user.setPassword(content.getText().toString());
  9. Gson gson = new Gson();
  10. //使用Gson將對象轉換為json字元串
  11. String json = gson.toJson(user);
  12. RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8")
  13. , json);
  14. Request request = new Request.Builder()
  15. .url(httpURL+"/HttpWeb/LoginServlet")//請求的url
  16. .post(requestBody)
  17. .build();
  18. Call call = client.newCall(request);
  19. call.enqueue(new Callback() {
  20. @Override
  21. public void onFailure(Call call, IOException e) {
  22. }
  23. @Override
  24. public void onResponse(Call call, Response response) throws IOException {
  25. final String res = response.body().string();
  26. runOnUiThread(new Runnable() {
  27. @Override
  28. public void run() {
  29. resultTV.setText(res);
  30. Log.v("Main.ID=",res);
  31. if (!res.equals(null)){
  32. Toast.makeText(Main.this,"登陸成功",Toast.LENGTH_SHORT).show();
  33. user.setId(res);
  34. Intent intent = new Intent();
  35. intent.setClass(Main.this,MainActivity.class);//跳轉到載入界面
  36. Bundle bundle = new Bundle();
  37. bundle.putParcelable("user", user);
  38. intent.putExtras(bundle);
  39. startActivity(intent);
  40. }else{
  41. Toast.makeText(Main.this,"登陸失敗",Toast.LENGTH_SHORT).show();
  42. }
  43. }
  44. });
  45. }
  46. });
  47. }

User表,其中實現介面Parcelable是為了讓bundle可以傳遞這個對象,使用bundle.putParcelable()這個辦法

[html] view plain copy

  1. import android.os.Parcel;
  2. import android.os.Parcelable;
  3. import java.io.Serializable;
  4. /**
  5. * Created by acer1 on 2018/4/5.
  6. */
  7. public class User implements Parcelable,Serializable{
  8. private String id;
  9. private String username;
  10. private String password;
  11. private String Nickname;
  12. private String Individuality_signature;
  13. public User(Parcel in) {
  14. id = in.readString();
  15. username = in.readString();
  16. password = in.readString();
  17. }
  18. public static final Creator

    <User>

    CREATOR = new Creator

    <User>

    () {
  19. @Override
  20. public User createFromParcel(Parcel in) {
  21. return new User(in);
  22. }
  23. @Override
  24. public User[] newArray(int size) {
  25. return new User[size];
  26. }
  27. };
  28. public User() {
  29. }
  30. public String getNickname() {
  31. return Nickname;
  32. }
  33. public void setNickname(String nickname) {
  34. Nickname = nickname;
  35. }
  36. public String getIndividuality_signature() {
  37. return Individuality_signature;
  38. }
  39. public void setIndividuality_signature(String individuality_signature) {
  40. Individuality_signature = individuality_signature;
  41. }
  42. public String getId() {
  43. return id;
  44. }
  45. public void setId(String id) {
  46. this.id = id;
  47. }
  48. public String getUsername() {
  49. return username;
  50. }
  51. public void setUsername(String username) {
  52. this.username = username;
  53. }
  54. public String getPassword() {
  55. return password;
  56. }
  57. public void setPassword(String password) {
  58. this.password = password;
  59. }
  60. @Override
  61. public int describeContents() {
  62. return 0;
  63. }
  64. @Override
  65. public void writeToParcel(Parcel dest, int flags) {
  66. dest.writeString(id);
  67. dest.writeString(username);
  68. dest.writeString(password);
  69. }
  70. }

現在客戶端基本就完事了,下面是伺服器的代碼,我開始學的時候就主要想學怎麼接收json格式的數據,我相信大家也是想學怎麼接收json數據格式的數據,通過gson將接收的數據解析成對象,看代碼。我們還要在伺服器裡面寫一個javabean,讓json數據映射成這個javabean,方便提取數據

首先我們導入一些包,讓我們可以接收到json數據

安卓okhttp3與伺服器通過json數據交互解析與上傳

[html] view plain copy

  1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2. response.setContentType("application/json");
  3. response.setCharacterEncoding("UTF-8");
  4. request.setCharacterEncoding("UTF-8");
  5. /**
  6. * 接收json
  7. */
  8. BufferedReader reader = request.getReader();
  9. String json = reader.readLine();
  10. System.out.println(json);
  11. Gson gson =new Gson();
  12. User user = gson.fromJson(json, User.class);
  13. System.out.println(user.getUsername());
  14. System.out.println(user.getPassword());
  15. PrintWriter out = response.getWriter();
  16. Integer msg;
  17. try {
  18. msg = UserDao.selectUser(user);
  19. out.print(msg);
  20. } catch (Exception e) {
  21. // TODO Auto-generated catch block
  22. e.printStackTrace();
  23. }
  24. reader.close();
  25. }

其中提取json數據和解析的代碼就是下面這段代碼

[html] view plain copy

  1. response.setContentType("application/json");
  2. response.setCharacterEncoding("UTF-8");
  3. request.setCharacterEncoding("UTF-8");
  4. /**
  5. * 接收json
  6. */
  7. BufferedReader reader = request.getReader();
  8. String json = reader.readLine();
  9. System.out.println(json);
  10. Gson gson =new Gson();
  11. User user = gson.fromJson(json, User.class);
  12. System.out.println(user.getUsername());
  13. System.out.println(user.getPassword());

然後就是伺服器端的javabean

[html] view plain copy

  1. public class User {
  2. private String id;
  3. private String username;
  4. private String password;
  5. private String Nickname;
  6. private String Individuality_signature;
  7. public String getNickname() {
  8. return Nickname;
  9. }
  10. public void setNickname(String nickname) {
  11. Nickname = nickname;
  12. }
  13. public String getIndividuality_signature() {
  14. return Individuality_signature;
  15. }
  16. public void setIndividuality_signature(String individuality_signature) {
  17. Individuality_signature = individuality_signature;
  18. }
  19. public String getId() {
  20. return id;
  21. }
  22. public void setId(String id) {
  23. this.id = id;
  24. }
  25. public String getUsername() {
  26. return username;
  27. }
  28. public void setUsername(String username) {
  29. this.username = username;
  30. }
  31. public String getPassword() {
  32. return password;
  33. }
  34. public void setPassword(String password) {
  35. this.password = password;
  36. }
  37. }

到這裡基本的過程就結束了,從安卓端上傳json數據到伺服器端解析json數據,將json數據解析成javabean對象。不知道對初學者有沒有幫助,又不懂的可以直接@我,

安卓okhttp3與伺服器通過json數據交互解析與上傳

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

json與protobuf的速度之爭
基於SSM架構的網路租車系統

TAG:程序員小新人學習 |