Was ist dieser Fehler? Wie kann ich das beheben? Meine App wird ausgeführt, kann jedoch keine Daten laden. Und das ist mein Fehler: Verwenden Sie JsonReader.setLenient (true), um fehlerhaften JSON in Zeile 1, Spalte 1, Pfad $ zu akzeptieren
Das ist mein Fragment:
public class news extends Fragment {
private RecyclerView recyclerView;
private ArrayList<Deatails> data;
private DataAdapter adapter;
private View myFragmentView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
myFragmentView = inflater.inflate(R.layout.news, container, false);
initViews();
return myFragmentView;
}
private void initViews() {
recyclerView = (RecyclerView) myFragmentView.findViewById(R.id.card_recycler_view);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
data = new ArrayList<Deatails>();
adapter = new DataAdapter(getActivity(), data);
recyclerView.setAdapter(adapter);
new Thread()
{
public void run()
{
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
loadJSON();
}
});
}
}
.start();
}
private void loadJSON() {
if (isNetworkConnected()){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.retryOnConnectionFailure(true)
.connectTimeout(15, TimeUnit.SECONDS)
.build();
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.memaraneha.ir/")
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
RequestInterface request = retrofit.create(RequestInterface.class);
Call<JSONResponse> call = request.getJSON();
final ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.show();
call.enqueue(new Callback<JSONResponse>() {
@Override
public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
progressDialog.dismiss();
JSONResponse jsonResponse = response.body();
data.addAll(Arrays.asList(jsonResponse.getAndroid()));
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<JSONResponse> call, Throwable t) {
progressDialog.dismiss();
Log.d("Error", t.getMessage());
}
});
}
else {
Toast.makeText(getActivity().getApplicationContext(), "Internet is disconnected", Toast.LENGTH_LONG).show();}
}
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null) {
// There are no active networks.
return false;
} else
return true;
}
}
RequestInterface:
public interface RequestInterface {
@GET("Erfan/news.php")
Call<JSONResponse> getJSON();
}
AKTUALISIEREN
Immer dieser Fehler nicht über Ihren JSON, es könnte von Ihrer falschen Anfrage werden, zur besseren Behandlung überprüfen Sie zuerst Ihre Anfrage im Postboten, wenn Sie eine Antwort erhalten haben, und vergleichen Sie Ihre JSON-Antwort mit Ihrem Modell, wenn nichts falsch ist, dann kommt dieser Fehler von Ihrer falschen Anfrage. es könnte auch passieren, wenn Ihre Antwort nicht josn ist (in einigen Fällen könnte die Antwort HTML sein)
response.body()
System.out.println
, Ja? In Android können Sie dieLog
Klasse verwenden, aber das spielt keine Rolle. Sie erhalten keine Daten oder es tritt ein Fehler bei oder in der Nähe aufJSONResponse jsonResponse = response.body();
. Ich weiß nicht, wie ich Ihren Fehler beheben soll, da er möglicherweise mit dem Netzwerk zusammenhängt. Sie sollten in der Lage sein, diesen Wert selbst zu überprüfen.Antworten:
Dies ist ein bekanntes Problem. Basierend auf dieser Antwort können Sie Folgendes hinzufügen
setLenient
:Wenn Sie dies nun zu Ihrer Nachrüstung hinzufügen , erhalten Sie einen weiteren Fehler:
Dies ist ein weiterer bekannter Fehler Sie Antwort finden hier (Dieser Fehler bedeutet , dass der Server - Antwort gut formatiert ist nicht); Ändern Sie also die Serverantwort, um etwas zurückzugeben:
Vergleichen Sie zum besseren Verständnis Ihre Antwort mit der Github-API .
Vorschlag : um herauszufinden , was zu Ihrem ist los
request/response
addHttpLoggingInterceptor
in Ihrem Retrofit .Basierend auf dieser Antwort wäre Ihr ServiceHelper :
Vergessen Sie auch nicht hinzuzufügen:
quelle
Dieses Problem tritt auch auf, wenn der Inhaltstyp der Antwort nicht lautet
application/json
. In meinem Fall war der Inhaltstyp der Antworttext/html
und ich war mit diesem Problem konfrontiert. Ich habe es geändert,application/json
dann hat es funktioniert.quelle
Beim Verständnis des Rückgabetyps ist ein Fehler aufgetreten. Fügen Sie einfach den Header hinzu, und das Problem wird behoben
quelle
Ich hatte das gleiche Problem zusammen mit https://stackoverflow.com/a/57245058/8968137 und beide wurden nach dem Beheben von google-services.json behoben
quelle
In meinem Fall ; Was mein Problem gelöst hat war .....
Sie könnten json so haben, die Schlüssel ohne " doppelte Anführungszeichen ....
Probieren Sie also einen beliebigen Online-Json-Validator aus, um sicherzustellen, dass Sie die richtige Syntax haben ...
Json Validator Online
quelle
Verwenden von Moshi:
Fügen Sie beim Erstellen Ihres Nachrüstdienstes .asLenient () zu Ihrer MoshiConverterFactory hinzu. Sie benötigen keinen ScalarsConverter. Es sollte ungefähr so aussehen:
quelle
Ich habe mich diesem Problem gestellt und Nachforschungen angestellt und nichts bekommen, also habe ich es versucht und schließlich wusste ich die Ursache für dieses Problem. Stellen Sie sicher, dass Sie einen guten Variablennamen haben, den ich mit $ start_date verwendet habe und der das Problem verursacht hat. Also versuche ich $ startdate und es funktioniert!
Stellen Sie außerdem sicher, dass Sie alle Parameter senden, die in der API deklariert sind, z. B. $ startdate = $ _POST ['startdate']; $ enddate = $ _POST ['enddate'];
Sie müssen diese beiden Variablen aus der Nachrüstung übergeben.
Wenn Sie das Datum für die SQL-Anweisung verwenden, versuchen Sie, es in '' wie '2017-07-24' einzufügen.
Ich hoffe es hilft dir.
quelle
Dieses Problem trat plötzlich bei mir auf, daher war ich mir sicher, dass es einen anderen Grund geben könnte. Beim tiefen Graben war es ein einfaches Problem, bei dem ich
http
stattdessen in der BaseUrl von Retrofit verwendet habehttps
. Also habehttps
ich es geändert, um das Problem für mich zu lösen.quelle
Es lohnt sich auch zu überprüfen, ob der Rückgabetyp Ihrer Schnittstellenmethoden fehlerhaft ist. Ich könnte dieses Problem reproduzieren, indem ich einen unbeabsichtigten Rückgabetyp wie habe
Call<Call<ResponseBody>>
quelle
Ich habe dieses Problem sehr einfach gelöst, nachdem ich herausgefunden habe, dass dies passiert, wenn Sie kein richtiges JSON-Objekt ausgeben. Ich habe einfach das
echo json_encode($arrayName);
anstelle vonprint_r($arrayName);
Mit meiner PHP-API verwendet.Jede Programmiersprache oder zumindest die meisten Programmiersprachen sollten eine eigene Version der Funktionen
json_encode()
und habenjson_decode()
.quelle