2017-02-16 7 views
0

Привет, я новичок в модернизации и обращении к проблеме, чтобы опубликовать данные json для вызова api's. Я пытался использовать множество решений, но не получал ответа.как передать необработанные данные json для retrofit 2.0

Это мой код

     Map<String,String> data=new HashMap<>(); 
       data.put("email",email); 
       data.put("feedback",feedback); 
       RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), (new JSONObject(data)).toString()); 
       Call<Feedback> call = apiInterface.feedbackResponse(accessToken,tokenType,client,expiry,uid,body); 
       call.enqueue(new Callback<Feedback>() { 
        @Override 
        public void onResponse(Call<Feedback> call, Response<Feedback> response) { 
         Log.e("Response",String.valueOf(response.code())); 
         Message message=response.body().getMessage(); 
         String messageBody=message.toString(); 
         String status=response.body().getStatus(); 
         Toast.makeText(getApplicationContext(),status+" : "+messageBody,Toast.LENGTH_LONG).show(); 
        } 

        @Override 
        public void onFailure(Call<Feedback> call, Throwable t) { 

        } 
       }); 

и мой интерфейс

 @POST("feedbacks") 
public Call<Feedback> feedbackResponse(@Header(ApiConstant.ACCESS_TOKEN) String accessToken, @Header(ApiConstant.TOKEN_TYPE) String tokenType, 
             @Header(ApiConstant.CLIENT) String client, @Header(ApiConstant.EXPIRY) String expiry, 
             @Header(ApiConstant.UID) String uid, @Body RequestBody feedback); 

Использование заголовков, как это не дает проблемы, как я использую его для каждого API. Так что не рассматривайте заголовки - проблема.

Мой ответ

public class Feedback { 
private Message message; 

private String status; 

private Data data; 

public Message getMessage() 
{ 
    return message; 
} 

public void setMessage (Message message) 
{ 
    this.message = message; 
} 

public String getStatus() 
{ 
    return status; 
} 

public void setStatus (String status) 
{ 
    this.status = status; 
} 

public Data getData() 
{ 
    return data; 
} 

public void setData (Data data) 
{ 
    this.data = data; 
} 

@Override 
public String toString() 
{ 
    return "ClassPojo [message = "+message+", status = "+status+", data = "+data+"]"; 
} 

}

Plese предложить мне правильный путь.

+0

http://stackoverflow.com/q/21398598/7012517 для ур ссылки ..! – Shobhit

+0

Чувак, я тоже следовал этому учебнику. но не получая ответа. Он показывает исключение Nullpointer. –

ответ

1

Изменить подпись

@POST("feedbacks") 
    public Call<Feedback> feedbackResponse(@Header(ApiConstant.ACCESS_TOKEN) String accessToken, @Header(ApiConstant.TOKEN_TYPE) String tokenType, 
              @Header(ApiConstant.CLIENT) String client, @Header(ApiConstant.EXPIRY) String expiry, 
              @Header(ApiConstant.UID) String uid, @Body Map<String,Object> feedback); 

и призывая к

Map<String,Object> data=new HashMap<>(); 
       data.put("email",email); 
       data.put("feedback",feedback); 
apiInterface.feedbackResponse(accessToken,tokenType,client,expiry,uid,data); 

или изменения типа @body данных в JsonObject и попробовать

JsonObject data = new JsonObject(); 
    data.addProperty("email",email); 
    data.add("feedback",new Gson().toJsonTree(feedback)); 
apiInterface.feedbackResponse(accessToken,tokenType,client,expiry,uid,data); 

или у ou также можно попробовать @Body FeedbackRequestData data. есть несколько способов сделать это.

apiInterface необходимо инициализировать с помощью парсера gson. И если заголовок требуется в каждом запросе, используйте okHttp-перехватчик.

Убедитесь, что связь класс порождается http://www.jsonschema2pojo.org/ при выборе JSON и GSON

+0

Я пробовал это, получая эту ошибку. java.lang.NullPointerException: попытка вызвать виртуальный метод com.androidapp.dooble.networks.Message com.androidapp.dooble.networks.Pojo.feedback.Feedback.getMessage() 'в ссылке нулевого объекта –

+0

Попробуйте данные JsonObject = новый JsonObject(); data.addProperty («электронная почта», электронная почта); data.add («обратная связь», новый Gson(). ToJsonTree (обратная связь)); – Qamar

+0

такой же, без изменений –