2016-06-06 2 views
0

Ich habe die folgende App, die mit API in PHP kommunizieren.API PHP Query Richtig, aber gibt Empty für Android Client

Ich benutze Retrofit, um es zu tun, mit GET-Methode, ich sende ein int, um Elemente über diese Int.

Mysql Tabelle Serie:

id 

Mysql Tabelle Folgen:

id 
f_id (Foreign key to Series) . 

Aktivität der Serie Artikel wird geladen, wenn darauf geklickt wird, ist es die Serie-ID an die GET zu senden, und es gibt Elemente, Aber hier ist das Problem, es wird ein Fehler protokolliert, aber auf der Mysql-Seite ist die Abfrage korrekt.

Beispiel, sendet er "1" als Serie-ID, ist das Ergebnis (i echo $ query verwendet zu überprüfen):

SELECT * FROM Episodes WHERE Episodes.series_f_key= 1 ORDER BY Episodes.id DESC {"MyDatabase":[{"id":"1","title":"1","image":"TestImge.jpg","link":"https://www.youtube.com/watch?v=uzgp65UnPxA","series":"\u062a\u062c\u0631\u0628\u0629","series_f_key":"1"}]} 

Es ist richtig, aber in der Android Client-Seite heißt es:

com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 3 column 1 path $ 

auch ich bin eine arabische Abfrage sendet, wird das gleiche Problem geschieht, ist die Abfrage richtig ist, und das "echo $ query" respond ist wie folgt:

{"MyDatabase":[{"id":"1","title":"\u062a\u062c\u0631\u0628\u0629","image":"Test.jpg","country":"\u0633\u0648\u0631\u064a\u0627"}]} 

Android Client-Seite:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 3 column 2 path $ 

Andere GET arbeiten ohne Probleme, nur diese Probleme verursachen.

Retrofit-Code:

private void MakeConnection(final EpisodesAdapter Adapter,int id){ 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(Constants.BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    ReApi Api = retrofit.create(ReApi.class); 

    Connection = Api.GetEpisodes(id); 


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


      List<EpisodeItem> LatestItems = response.body().GetList(); 
      for (int i = 0; i < LatestItems.size(); i++) { 

       if (Items == null) 
        Items = new ArrayList<>(); 

       Items.add(LatestItems.get(i)); 

      } 

      Adapter.notifyDataSetChanged(); 

     } 


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

      Toast.makeText(EpisodesActivity.this, getResources().getString(R.string.couldnotfindanything), Toast.LENGTH_LONG).show(); 
      t.printStackTrace(); 

     } 


    }); 
} 

    private interface ReApi{ 

    @GET("myapitest.php") 
    Call<Model> GetEpisodes(@Query("getbyid")int id); 


} 

private class Model{ 
    private List<EpisodeItem> MyDatabase; 

    public List<EpisodeItem> GetList() { 
     return MyDatabase; 
    } 

    public void SetList(List<EpisodeItem> rt) { 
     this.MyDatabase= rt; 
    } 

} 

Model-Klasse:

private int id; 
private String title; 
private String link; 
private String image; 
private String series; 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getLink() { 
    return link; 
} 

public void setLink(String link) { 
    this.link = link; 
} 

public String getImage() { 
    return image; 
} 

public void setImage(String image) { 
    this.image = image; 
} 

public String getSeries() { 
    return series; 
} 

public void setSeries(String series) { 
    this.series = series; 
} 

Muster anfordern:

200 OK http://www.syriantc.com/ApiTest/apifile.php?getbyepisode=1 (313ms) 
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Date: Tue,  07 Jun 2016 06:33:46 GMT 
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Server:  Apache/2.4.18 
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: X-Powered-By: PHP/5.4.45 
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Vary: Accept-Encoding,User-Agent 
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Keep-Alive: timeout=5 
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Connection: Keep-Alive 
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Content-Type: text/html 
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: OkHttp-Sent-Millis: 1465281228946 
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: OkHttp-Received-Millis: 1465281229106 
06-07 09:33:49.108 29654-29863/com.abohani.test D/OkHttp: 
06-07 09:33:49.108 29654-29863/com.abohani.test D/OkHttp: SELECT * FROM Episodes WHERE Episodes.series_f_key= 1 ORDER BY Episodes.id DESC 
06-07 09:33:49.108 29654-29863/com.abohani.test D/OkHttp: {"MyDatabase":[{"id":"1","title":"1","image":"Test.jpg","link":"https://drive.google.com/file/d/0B8UrrDgeyvYJMXdtMXdYeEFnLVU/view","series":"\u062a\u062c\u0631\u0628\u0 629","series_f_key":"1"}]} 
06-07 09:33:49.108 29654-29863/com.abohani.test D/OkHttp: <-- END HTTP (284-byte body) 
+0

fügen Sie Ihren Android-Seitencode auch hinzu. wie Sie analysieren – USKMobility

+0

auch Ihre Modellklasse hinzufügen – USKMobility

+0

Aktualisiert die OP. – Jaeger

Antwort

0

Es sieht aus wie Ihre Ausnahmemeldung wird Ihnen sagen, was zu tun ist:

Use JsonReader.setLenient(true) 

Auch diese Meldung, dass Sie Ihre JSON Parsen ändern müssen, da seine ein Objekt erwartet, aber seine eine Reihe bekommen:

Expected BEGIN_OBJECT but was BEGIN_ARRAY 

Ihr Beispiel JSON wie folgt aussieht: {"MyDatabase":[{"id":". Es scheint, als ob Sie das äußere Objekt mit dem Schlüssel 'MeineDatenbank' in Ihrer Serialisierung nicht berücksichtigen. Sie könnten eine weitere Modellklasse für MyDatabase hinzufügen, die dann die Liste der Episodenelemente enthält.

+0

Ich habe den "JsonReader" gesehen, wenn ich ihn benutze, kann ich nicht von statisch beziehen. – Jaeger

+0

@AboHaniCall Ich bin sicher, dass Sie etwas tun, wie 'JsonReader Reader = neue JsonReader (...' in Ihrem Code. Danach rufen Sie 'Reader.setLenient (true)' – elevine

+0

Ich habe es getan, durchsucht Stackoverflow und sah http://stackoverflow.com/questions/27485346/malformedjsonexception-with-retrofit-api und andere Antworten, der Fehler zu einem anderen un-verwandten Problem erweitert, das überhaupt nicht geholfen hat, für den zweiten, der Code erwartet Array, ich weiß nicht, wo ich tippte, um ein Objekt zu erwarten. – Jaeger

0

Höhe ist korrekt. Ich wollte ein Zitat und weitere Informationen hinzufügen.

Diese link erklärt weiter. Das Problem ist, dass es ein Problem mit Ihrem JSON-Objekt gibt, das jedoch größtenteils als korrekt erkannt wird. Normalerweise verursacht das Leerzeichen am Ende dies.

Verwandte Themen