2016-09-14 28 views
0

无法发送的岗位API数据原始JSON数据使用Retrofit 2.0无法使用改造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"); 
    } 
    }); 

MyInterface的在POST API数据发送原始JSON数据:

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

任何人都可以提出一个解决方案使用Retrofit 2.0发送原始JSON数据POST api?我新使用Retrofit;请在onResponse方法中获得null响应。

+1

添加您的API和改造服务生成器类代码太 – USKMobility

+0

问题是我不能够发送这些JSON对象perameters并得到空应答.. :( –

回答

1

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

创建模型类,如下所示,并根据您的项目结构变化软件包名称:

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请求如下:根据您的请求和响应模型

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

更新YourResponseModelClass & RequestModelClass类。

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

+0

我不理解.my api需要将参数作为“原始”数据传递,并且我必须在该函数中传递一个json对象。我唯一想知道的是我该怎么做,如果我通过了一个模型类,作为json对象传递 –

+0

谢谢@USKMobility我通过使用你的方法得到了我的回应 –

-1

您可以在复古2.0后生的JSONObject。需要将其转换成RequestBody这样

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

不工作.. !! –

+0

@POST(“appUsers /”)。slash after'appuser' ????? –

+0

没有影响添加和删​​除这个斜杠。 –