2016-10-03 5 views
1

Ich bin neu über Retrofit Library und ich möchte wissen, was ist besser, warum ein Objekt mit post-Methode der Nachrüstung senden.Retrofit 2 senden Objekt mit POST

Hier ist ein Code.

Meine Klasse:

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; 
    } 

} 

Meine Schnittstelle:

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

Mein Anruf mit Retrofit:

...... 
     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()); 
      } 

     }); 

Aber jedes Mal, es zurückgeben mich Statuscode 500

Kann mir jemand eine ID geben? ea um ein Objekt mit Nachrüstung zu versenden?

+1

bitte auf den Stack-Trace –

+0

fügen Sie bitte Ihre adb-Protokolle auch hinzufügen. –

+0

Haben Sie den Gson oder Jackson Konverter zu Ihrer Retrofit-Instanz hinzugefügt? – nexus5x

Antwort

1

Sie können es mit Hilfe von @FormUrlEncoded zum Beispiel senden:

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

aber ich denke, Ihr Weg am einfachsten und richtig ist.

Wenn Sie nicht faul sind, können Sie alles über Nachrüst here

0
  1. Ist Ihr API-Server ordnungsgemäß funktioniert finden?

    HTTP status 500 means internal server error. Testen Sie zuerst Ihren API-Server mit einem zuverlässigen Client. Schauen Sie sich die Fehlerprotokolle auf dem Server an und stellen Sie sicher, welche Seite das Problem verursacht.

  2. Haben Sie den Gson oder Jackson Konverter zu Ihrer Retrofit-Instanz hinzugefügt?

    Wenn Ihr Server ist klar, dann der Client, Ihre App hat ein Problem. Ein ungültiger Anfragetext hat möglicherweise den Serverfehler verursacht.

    Haben Sie einen Gson (oder Jackson) Konverter hinzugefügt? Ihre @Headers Annotation konvertiert Ihr Objekt nicht automatisch in json. Wenn Ihr Server json für eine Anfrage erwartet, senden Sie nicht 'object', sondern eine Zeichenfolge der json-Repräsentation des Objekts. Implementieren Serializable Schnittstelle ist nicht erforderlich. Der Gson-Konverter konvertiert automatisch ein beliebiges Objekt in json, wenn Sie es hinzufügen, oder Sie müssen RequestBody verwenden.

    Von Retrofit github page (REQUEST BODY section):

    Wenn kein Konverter hinzugefügt wird, nur RequestBody verwendet werden.

0

500 Internal Server Error

Der 500-Statuscode oder Internal Server Error bedeutet, dass Server die Anforderung nicht aus einem unbekannten Grund verarbeiten kann. Manchmal wird dieser Code angezeigt, wenn speziellere 5xx-Fehler geeigneter sind.

Die häufigste Ursache für diesen Fehler ist eine Fehlkonfiguration des Servers (z. B. eine fehlerhafte .htaccess-Datei) oder fehlende Pakete (z. B. eine PHP-Datei ausführen, ohne dass PHP ordnungsgemäß installiert wurde).

können Sie überprüfen it.Itis feine Arbeit für mich

API- Schnittstelle Klasse

public interface ApiInterface { 

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

} 

SaveBill Modell

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; 
    } 

} 
Verwandte Themen