2016-10-03 6 views
1

새로운 기능 Retrofit Library에 대한 새로운 내용과 게시 방법으로 개체를 보내는 이유가 무엇인지 더 알고 싶습니다.Retrofit 2 POST를 사용하여 개체를 보내십시오.

여기에 몇 가지 코드가 있습니다.

나의 등급 :

public class ExampleClass implements Serializable { 

    @SerializedName("id") 
    int id; 


    @SerializedName("name") 
    String name; 

    public ExampleClass(int id, String name) { 
     this.id = id; 
     this.name= name; 
    } 

} 

내 인터페이스 : 개조와

public interface ApiInterface { 
    @Headers("Content-Type: application/json") 
    @POST("getclass/") 
    Call<ExampleClass> getExampleClass(@Body ExampleClass exampleClass); 
} 

내 전화 :

...... 
     ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class); 
     Call<ExampleClass> call = apiService.getExampleClass(exampleClass); 
     call.enqueue(new Callback<ExampleClass>() { 
      @Override 
      public void onResponse(Call<ExampleClass> call, Response<ExampleClass> response) { 

       int statusCode = response.code(); 

       Log.i(TAG, "Status Code: " + statusCode); 

      } 

      @Override 
      public void onFailure(Call<ExampleClass> call, Throwable t) { 
       Log.i(TAG, "Error: " + t.toString()); 
      } 

     }); 

그러나 모든 시간은 나에게 상태 코드를 반환 (500)

누군가 날 이드에게 줄 수 있니? retrofit으로 객체를 보내려면?

@FormUrlEncoded 
@Headers("Content-Type: application/json") 
@POST("getclass/") 
Call<ExampleClass> getExampleClass(@Field("id") int id, @Field("name") String name); 

을하지만 난 당신의 방법은 가장 쉽고 올바른 생각 :

+1

을 위해 잘 작동 또한 ADB 로그를 추가하시기 바랍니다 스택 추적 –

+0

를 추가하십시오 검토 할 수 있습니다. –

+0

개조 공사 인스턴스에 Gson 또는 Jackson 변환기를 추가 했습니까? – nexus5x

답변

1

당신은 예를 들어 @FormUrlEncoded의 도움으로 보낼 수 있습니다.

당신이 모든 개조에 대해 찾을 수 게으른하지 않은 경우 here

0
  1. 당신의 API 서버가 제대로 작동합니까?

    HTTP status 500 means internal server error. 신뢰할 수있는 클라이언트로 먼저 API 서버를 테스트하십시오. 서버의 오류 로그를보고 어느면에서 문제가 발생하는지 확인하십시오.

  2. 개조 인스턴스에 Gson 또는 Jackson 변환기를 추가 했습니까?

    서버가 깨끗한 경우 클라이언트라면 앱에 문제가있는 것입니다. 조작 된 요청 본문으로 인해 서버 오류가 발생했을 수 있습니다.

    Gson (또는 Jackson) 변환기를 추가 했습니까? @Headers 주석은 객체를 json으로 자동 변환하지 않습니다. 서버가 요청에 대해 json을 예상하면 '객체'가 아니라 객체의 json 표현 문자열을 전송합니다. 구현 Serializable 인터페이스가 필요하지 않습니다. Gson 변환기는 임의의 오브젝트를 추가하면 자동으로 임의의 오브젝트를 json으로 변환하거나 RequestBody을 사용해야합니다. Retrofit github page (REQUEST BODY section)에서

    는 : 어떤 계산기가 추가되지 않은 경우

    RequestBody 사용할 수 있습니다.

0

500 내부 서버 오류

500 상태 코드, 또는 내부 서버 오류는 해당 서버가 알 수없는 이유로 요청을 처리 할 수 ​​없음을 의미합니다. 때때로이 코드는보다 구체적인 5xx 오류가 더 적절할 때 나타납니다.

이 오류의 가장 일반적인 원인은 잘못된 서버 구성 (예 : 잘못된 .htaccess 파일) 또는 누락 된 패키지 (예 : PHP가 제대로 설치되지 않은 상태에서 PHP 파일을 실행하려는 경우)입니다.

당신은 it.Itis 나

API 인터페이스 클래스

public interface ApiInterface { 

    @FormUrlEncoded 
     @POST("/billingrest/save") 
     Call<LoginError> sendProductList(@Body SaveBill saveBill); 

} 

SaveBill 모델

package com.example.dev.billingsoftware.model; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

import java.util.List; 

/** 
* Created by dev on 4/8/17. 
*/ 
public class SaveBill { 

    @SerializedName("customer_name") 
    @Expose 
    private String customerName; 
    @SerializedName("customer_id") 
    @Expose 
    private String customerId; 
    @SerializedName("bill_number") 
    @Expose 
    private String billNumber; 
    @SerializedName("mobile_number") 
    @Expose 
    private String mobileNumber; 
    @SerializedName("bill_date") 
    @Expose 
    private String billDate; 
    @SerializedName("address") 
    @Expose 
    private String address; 
    @SerializedName("count") 
    @Expose 
    private String count; 
    @SerializedName("data") 
    @Expose 
    private List<BillData> data = null; 

    public String getCustomerName() { 
     return customerName; 
    } 

    public void setCustomerName(String customerName) { 
     this.customerName = customerName; 
    } 

    public String getCustomerId() { 
     return customerId; 
    } 

    public void setCustomerId(String customerId) { 
     this.customerId = customerId; 
    } 

    public String getBillNumber() { 
     return billNumber; 
    } 

    public void setBillNumber(String billNumber) { 
     this.billNumber = billNumber; 
    } 

    public String getMobileNumber() { 
     return mobileNumber; 
    } 

    public void setMobileNumber(String mobileNumber) { 
     this.mobileNumber = mobileNumber; 
    } 

    public String getBillDate() { 
     return billDate; 
    } 

    public void setBillDate(String billDate) { 
     this.billDate = billDate; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public String getCount() { 
     return count; 
    } 

    public void setCount(String count) { 
     this.count = count; 
    } 

    public List<BillData> getData() { 
     return data; 
    } 

    public void setData(List<BillData> data) { 
     this.data = data; 
    } 

} 
관련 문제