无法使用Retrofit 2.0在post api数据中发送原始json数据

时间:2016-09-14 04:56:26

标签: android api android-studio retrofit retrofit2

无法使用Retrofit 2.0

JSON api数据中发送原始POST数据
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");
    }
  });

MyInterface的:

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

有人建议使用JSONPOST api中发送原始Retrofit 2.0数据的解决方案吗?我是新手使用Retrofit;请帮助我在null方法中获得onResponse回复。

2 个答案:

答案 0 :(得分:1)

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

按如下方式创建Model类,并根据项目结构更改包名称:

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&amp; RequestModelClass根据您的请求和响应模型类。

您可以从json http://www.jsonschema2pojo.org/

生成模型类

答案 1 :(得分:-1)

你可以在复古2.0中发布原始jsonObject。需要将其转换为RequestBody,如此

RequestBody requestBody =RequestBody.create(MediaType.parse("application/json"),myUserData.toString() );
Call<Response> data = Ainterface.getResponse(requestBody);