2017-12-21 5 views
0

I bisherige Lösungen mostly this one für dieses Problem gelesen habe, aber keiner von ihnen arbeitete für mich. :(Während Debuggen i-RAW-Anforderungsdaten von Retrofit etwas wie unten Bild und ich habe hervorgehoben 2 Portionen gefunden.

my debugging screenshot

hier die ersten markierten Teil zeigt meine Retrofit Anfrage in rohem json-Format

{ 
    "operation": "register", 
    "studentModel": { 
    "batch_id": "cseuui", 
    "dept_code": "CSE", 
    "password": "p", 
    "student_address": "tpc", 
    "student_email": "[email protected]", 
    "student_id": "tyjvc", 
    "student_name": "jak", 
    "student_phone": "87532" 
    } 
} 

aber die mir die zweite geben markierten Teil des Fehlers:

Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 

aber mit Postbote Ich konnte diesen rohen JSON erfolgreich in die Datenbank einfügen.

{ 
    "operation": "register", 
    "studentModel": { 
    "batch_id": "cseuui", 
    "dept_code": "CSE", 
    "password": "p", 
    "student_address": "tpc", 
    "student_email": "[email protected]", 
    "student_id": "tyjvc", 
    "student_name": "jak", 
    "student_phone": "87532" 
    } 
} 

Das ist meine Server-Seite bedeutet, ist in Ordnung.
Gibt es noch etwas, das ich vermisse?
ich unten einige meiner Codes gebe,

Retrofit2 und Gson Abhängigkeit:

compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile 'com.squareup.retrofit2:converter-gson:2.1.0' 

StudentModel.java

Server request and response

Retrofit Client and ApiInterface

und schließlich

Registration Method

als meine Server-Seite ist perfekt mit Postbote arbeitet, was ist das, was ich hier fehlt. lass es mich wissen, bitte.

+0

Können Sie Ihre Postbote-Antwort mit Erfolgsmisserfolg teilen? – R2R

+0

Ich bekomme diesen Antwortformular-Server, wenn ich von ** Postman ** {"Ergebnis": "Erfolg", "Nachricht": "Student erfolgreich registriert!") –

+0

Versuchen Sie meine aktualisierte Antwort – R2R

Antwort

0

Schließlich löste ich dieses Problem nur durch Schüler Modellklasse Variablennamen als meine Datenbank Spaltennamen zu ändern, und ich entfernt auch @SerializedName("result") @Expose Mapping in der Klassendefinition. Die Spaltennamen der Datenbank stimmen nicht mit meinen Klassenvariablen überein. Vielen Dank für Ihre Mühe.

0

Retrofit auf ungültige JSON Resp

try Resp In diesem String Fromat von Server

  Gson gson = new Gson(); 
     response=gson.toJson(courseList); 
     JsonObject myObj = new JsonObject(); 

     myObj.addProperty("operation", "register"); 

     myObj.add("studentModel",data); 

     response = myObj.toString(); 

return responce; 

Retrofit Builder

retrofit =new Retrofit.Builder() 
        .baseUrl(BASE_URL) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .build(); 
+0

danke, aber ich habe versucht, nur Er legt den Server -> '{ "Betrieb": "Register", "studentModel": { "batch_id": "cseuui", "dept_code": "CSE", "Passwort": "p", "student_address": "tpc", "student_email": "[email protected]", "STUDENT_ID": "tyjvc", "student_name": "jak", "student_phone": "87532" } } 'dies von gson beim Debuggen der App, aber das gibt ein illiga lState-Ausnahme –

0

erstellen Modellklasse Einfach nicht Liste Typ zu senden.

, dass nach einem String-Variable Betrieb erstellen und Inner Klasse von studentModel erstellen.

public class Main{ 

    @SerializeName("operation") 
    private String operation; 

    @SerializeName("StudentModel") 
    private StudentModel studentModel; 

} 

und dann Getter Setter

+1

dies ist, was ich mit meiner Modellklasse {Server Request] (https://pastebin.com/4pJurDRE) getan habe. –

+0

StudentModel Arbeit als innere Klasse und Otyer Parameter definieren in dieser Klasse –

+0

@SerializedName ("ID") private Int ID; @SerializedName ("chapterName") private Zeichenfolge chapterName; @SerializedName ("Betreff") private StudentSubject studentSubject; –

0

Sie versuchen, Array zuzugreifen, aber Gson findet eine Zeichenfolge in der ersten Zeile erzeugen.

so müssen Sie die Modellklasse ändern.

StudentModel.java

` public class StudentModel {

private String operation; 
private Student student; 

public Rootjava(String operation, Student student) { 
    this.operation = operation; 
    this.student = student; 
} 

public String getOperation() { 
    return operation; 
} 

public void setOperation(String operation) { 
    this.operation = operation; 
} 

public Student getStudent() { 
    return student; 
} 

public void setStudent(Student student) { 
    this.student = student; 
} 

@Override 
public String toString() { 
    return "studentModel{" + 
      "operation='" + operation + '\'' + 
      ", student=" + student + 
      '}'; 
} 

private class Student{ 
    @SerializedName("dept_code") 
    private String deptCode; 
    @SerializedName("student_name") 
    private String studentName; 
    private String password; 
    @SerializedName("batch_id") 
    private String batchId; 
    @SerializedName("student_phone") 
    private String studentPhone; 
    @SerializedName("student_address") 
    private String studentAddress; 
    @SerializedName("student_id") 
    private String studentId; 
    @SerializedName("student_email") 
    private String studentEmail; 

    public Student(String deptCode, String studentName, 
        String password, String batchId, 
        String studentPhone, String studentAddress, 
        String studentId, String studentEmail) { 
     this.deptCode = deptCode; 
     this.studentName = studentName; 
     this.password = password; 
     this.batchId = batchId; 
     this.studentPhone = studentPhone; 
     this.studentAddress = studentAddress; 
     this.studentId = studentId; 
     this.studentEmail = studentEmail; 
    } 

    public String getDeptCode() { 
     return deptCode; 
    } 

    public void setDeptCode(String deptCode) { 
     this.deptCode = deptCode; 
    } 

    public String getStudentName() { 
     return studentName; 
    } 

    public void setStudentName(String studentName) { 
     this.studentName = studentName; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getBatchId() { 
     return batchId; 
    } 

    public void setBatchId(String batchId) { 
     this.batchId = batchId; 
    } 

    public String getStudentPhone() { 
     return studentPhone; 
    } 

    public void setStudentPhone(String studentPhone) { 
     this.studentPhone = studentPhone; 
    } 

    public String getStudentAddress() { 
     return studentAddress; 
    } 

    public void setStudentAddress(String studentAddress) { 
     this.studentAddress = studentAddress; 
    } 

    public String getStudentId() { 
     return studentId; 
    } 

    public void setStudentId(String studentId) { 
     this.studentId = studentId; 
    } 

    public String getStudentEmail() { 
     return studentEmail; 
    } 

    public void setStudentEmail(String studentEmail) { 
     this.studentEmail = studentEmail; 
    } 

    @Override 
    public String toString() { 
     return "Student{" + 
       "deptCode='" + deptCode + '\'' + 
       ", studentName='" + studentName + '\'' + 
       ", password='" + password + '\'' + 
       ", batchId='" + batchId + '\'' + 
       ", studentPhone='" + studentPhone + '\'' + 
       ", studentAddress='" + studentAddress + '\'' + 
       ", studentId='" + studentId + '\'' + 
       ", studentEmail='" + studentEmail + '\'' + 
       '}'; 
    } 
} 

}`

Mit dieser Modellklasse.

Sie können das Plugin verwenden, um diese POJO-Klasse zu generieren.

+0

Jetzt versuche ich, Modellklasse zu ändern, aber wenn das ist, muss ich 2 verschiedene Modellklassen für die verwenden Studentenmodell. Lass mich sehen, was passiert. –

+0

[Gleiches Ergebnis] (https://i.stack.imgur.com/cOceD.png) nichts funktioniert ..... vielleicht sollte ich versuchen, @Field-Tag in der Schnittstelle an den Server anstelle von einem Modell anfordern. –

0

Versuchen Sie folgendes:

Ihre reciving Zeichenfolge statt JsonObject .Mit Ihre ServerResponse wie diese Abbildung und fügen Header als 'application/json'

1.Add headder header.put ("Content-Type" , "Anwendung/json");

private void registerProcess(String studentName, String studentAddress, String studentEmail, String studentPhone, String department, String batch_id, String student_id, String rePassword) { 

     APIInterface appInterface = ApiClient.getClient().create(APIInterface.class); 

     StudentModel student = new StudentModel(); 
     student.setStudent_name(studentName); 
     student.setStudent_address(studentAddress); 
     student.setStudent_email(studentEmail); 
     student.setStudent_phone(studentPhone); 
     student.setDept_code(department); 
     student.setBatch_id(batch_id); 
     student.setStudent_id(student_id); 
     student.setPassword(rePassword); 

     Log.e(TAG,student.toString()); 

     ServerRequest request = new ServerRequest(); 


     Map<String, String> header = new HashMap<>(); 
     header.put("Content-Type", "application/json"); 

     request.setOperation(Config_Ref.REGISTER_OPERATION); 
     request.setStudentModel(student); 

     Call<ServerResponse> response = appInterface.operation(request,header); 

     response.enqueue(new Callback<ServerResponse>() { 
      @Override 
      public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) { 

       if(response.isSuccessful()){ 

        ServerResponse resp = response.body(); 
        Toast.makeText(RegisterActivity.this, resp.getMessage()+" success", Toast.LENGTH_SHORT).show(); 
        Log.e(TAG,resp.getMessage()+" success"); 
       }else{ 
        Toast.makeText(RegisterActivity.this, response.message()+" not success", Toast.LENGTH_SHORT).show(); 
        Log.e(TAG,response.message()+" not success"); 
       } 
       /* Snackbar.make(fview, resp.getMessage(), Snackbar.LENGTH_LONG).show();*/ 

       //pDialog.dismiss(); 
      } 

      @Override 
      public void onFailure(Call<ServerResponse> call, Throwable t) { 
       /*Snackbar.make(fview, t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();*/ 
       Toast.makeText(RegisterActivity.this, t.getLocalizedMessage()+" failed"+call.toString(), Toast.LENGTH_SHORT).show(); 

       Log.e(TAG,t.getLocalizedMessage()+" failed"); 
      } 
     }); 


    } 

2.ApiInterface.java

Header als JSON-Format öffentliche Schnittstelle ApiInterface {

@POST("/iuk/api/credentials") 
    Call<ServerResponse> operation(@Body ServerRequest request,@HeaderMap Map<String, String> header); 
    } 

3.ServerResponse.java

public class ServerResponse { 

    @SerializedName("result") 
    @Expose 
    private String result; 
    @SerializedName("message") 
    @Expose 
    private String message; 

    public String getResult() { 
    return result; 
    } 

    public void setResult(String result) { 
    this.result = result; 
    } 

    public String getMessage() { 
    return message; 
    } 

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

    } 

ApiClient.Java

hinzufügen
public class ApiClient { 

    private static final String BASE_URL = "https://xyz.000webhostapp.com"; 
    private static Retrofit retrofit = null; 


    public static Retrofit getClient() { 
     if (retrofit == null) { 
      HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
      interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
      OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() { 
      @Override 
      public Response intercept(Chain chain) throws IOException { 
       Request.Builder requestBuilder = chain.request().newBuilder(); 
       requestBuilder.header("Content-Type", "application/json"); 
       return chain.proceed(requestBuilder.build()); 
       } 
       }) 
       .connectTimeout(30, TimeUnit.MINUTES) 
       .readTimeout(30, TimeUnit.MINUTES) 
       .build(); 

      retrofit = new Retrofit.Builder() 
        .baseUrl(BASE_URL) 
        .client(client) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .build(); 
     } 
     return retrofit; 
    } 

} 

depedencies

compile 'com.squareup.retrofit2:retrofit:2.3.0' 
compile 'com.google.code.gson:gson:2.8.2' 
compile 'com.squareup.retrofit2:converter-gson:2.3.0' 
compile 'com.squareup.okhttp3:okhttp:3.9.0' 
compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'  
+0

[Gleiches Ergebnis] (https://i.stack.imgur.com/cOceD.png), nichts passiert IlligalState Exception. –

+0

Versuchen Sie meine aktualisierte Antwort – R2R

+0

@MohammadAbsJabed überprüfte den obigen Code? – R2R

Verwandte Themen