无法使用 Retrofit 2.0 在 post api 数据中发送原始 json 数据 [英] Unable to send raw json data in post api data using Retrofit 2.0

查看:27
本文介绍了无法使用 Retrofit 2.0 在 post api 数据中发送原始 json 数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

无法使用 改造 2.0

Unable to send raw JSON data in POST api data using Retrofit 2.0

try {
  JSONObject myUserData = new JSONObject();
  myUserData.put("mobile", "917023847899");
  myUserData.put("displayName", "Deepuu");
  myUserData.put("info", "AD");
  myUserData.put("photo", "");
  myUserData.put("displayName", "Deepu");

  JSONObject deviceData = new JSONObject();
  ;
  deviceData.put("deviceId", "2124578910556991");
  deviceData.put("pnToken", "klklklkl");
  deviceData.put("os", "android");
  deviceData.put("targetTopic", "jkjkjkjkj");

  myUserData.put("device", "" + deviceData);
  OkHttpClient client = new OkHttpClient();

  Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

  Api Ainterface = retrofit.create(Api.class);

  Call<Response> data = Ainterface.getResponse(myUserData);
  data.enqueue(new Callback<Response>() {
    @Override
    public void onResponse(Call<Response> call, retrofit2.Response<Response> response) {
      if (response.isSuccessful()) {
        Response rr = response.body();
        Integer ss = rr.getStatusCode();
        Log.e("I Am", "Success"  );
      }
    }

    @Override
    public void onFailure(Call<Response> call, Throwable t) {
      Log.e("I Am", "Failed");
    }
  });

我的界面:

@POST("appUsers/")
Call<Response> getResponse(@Body RequestBody value);

有人可以建议使用 Retrofit 2.0POST api 中发送原始 JSON 数据的解决方案吗?我是使用 Retrofit 的新手;请帮忙,因为我在 onResponse 方法中收到 null 响应.

Can anyone suggest a solution for sending raw JSON data in POST api using Retrofit 2.0? I'm new to using Retrofit; please help as I am getting null response in onResponse method.

推荐答案

您正在使用 GsonConverterFactory.因此,您应该传递通过改造转换为字符串并添加到请求正文的模型类对象.但是在您的代码中,您传递了 JSONObject.

You are using GsonConverterFactory. So, you should pass model class object that is converted by retrofit to string and added to request body. But in your code, you passed JSONObject.

如下创建模型类并根据您的项目结构更改包名称:

Create Model class as follows and change package name according your project structure:

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Device {

@SerializedName("deviceId")
@Expose
private String deviceId;
@SerializedName("pnToken")
@Expose
private String pnToken;
@SerializedName("os")
@Expose
private String os;
@SerializedName("targetTopic")
@Expose
private String targetTopic;

/**
*
* @return
* The deviceId
*/
public String getDeviceId() {
return deviceId;
}

/**
*
* @param deviceId
* The deviceId
*/
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}

/**
*
* @return
* The pnToken
*/
public String getPnToken() {
return pnToken;
}

/**
*
* @param pnToken
* The pnToken
*/
public void setPnToken(String pnToken) {
this.pnToken = pnToken;
}

/**
*
* @return
* The os
*/
public String getOs() {
return os;
}

/**
*
* @param os
* The os
*/
public void setOs(String os) {
this.os = os;
}

/**
*
* @return
* The targetTopic
*/
public String getTargetTopic() {
return targetTopic;
}

/**
*
* @param targetTopic
* The targetTopic
*/
public void setTargetTopic(String targetTopic) {
this.targetTopic = targetTopic;
}

}
-----------------------------------com.example.Request.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Request {

@SerializedName("mobile")
@Expose
private String mobile;
@SerializedName("info")
@Expose
private String info;
@SerializedName("photo")
@Expose
private String photo;
@SerializedName("displayName")
@Expose
private String displayName;
@SerializedName("device")
@Expose
private Device device;

/**
*
* @return
* The mobile
*/
public String getMobile() {
return mobile;
}

/**
*
* @param mobile
* The mobile
*/
public void setMobile(String mobile) {
this.mobile = mobile;
}

/**
*
* @return
* The info
*/
public String getInfo() {
return info;
}

/**
*
* @param info
* The info
*/
public void setInfo(String info) {
this.info = info;
}

/**
*
* @return
* The photo
*/
public String getPhoto() {
return photo;
}

/**
*
* @param photo
* The photo
*/
public void setPhoto(String photo) {
this.photo = photo;
}

/**
*
* @return
* The displayName
*/
public String getDisplayName() {
return displayName;
}

/**
*
* @param displayName
* The displayName
*/
public void setDisplayName(String displayName) {
this.displayName = displayName;
}

/**
*
* @return
* The device
*/
public Device getDevice() {
return device;
}

/**
*
* @param device
* The device
*/
public void setDevice(Device device) {
this.device = device;
}

}

和请求如下:

@POST("yourpath")
    Call<YourResponseModelClass> getResponse(@Body RequestModelClass request);

更新 YourResponseModelClass &RequestModelClass 根据您的请求和响应模型类.

Update YourResponseModelClass & RequestModelClass according to your request and response model class.

您可以从 json 生成模型类,http://www.jsonschema2pojo.org/

You can generate model class from json, http://www.jsonschema2pojo.org/

这篇关于无法使用 Retrofit 2.0 在 post api 数据中发送原始 json 数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆