Utilisez JsonReader.setLenient (true) pour accepter un JSON mal formé sur la ligne 1 de la colonne 1 du chemin $

Quelle est cette erreur? Comment puis-je réparer cela? Mon application est en cours d’exécution mais ne peut pas charger de données. Et ceci est mon erreur: Utilisez JsonReader.setLenient (true) pour accepter un JSON mal formé à la ligne 1 de la colonne 1 du chemin $

Ceci est mon fragment:

public class news extends Fragment { private RecyclerView recyclerView; private ArrayList 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(); 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 call = request.getJSON(); final ProgressDialog progressDialog = new ProgressDialog(getActivity()); progressDialog.show(); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { progressDialog.dismiss(); JSONResponse jsonResponse = response.body(); data.addAll(Arrays.asList(jsonResponse.getAndroid())); adapter.notifyDataSetChanged(); } @Override public void onFailure(Call call, Throwable t) { progressDialog.dismiss(); Log.d("Error", t.getMessage()); } }); } else { Toast.makeText(getActivity().getApplicationContext(), "دستگاه شما به اینترنت متصل نیست!", 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 getJSON(); } 

une

Ceci est un problème connu et sur la base de cette réponse, vous devez append setLenient :

 Gson gson = new GsonBuilder() .setLenient() .create(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .client(client) .addConverterFactory(GsonConverterFactory.create(gson)) .build(); 

Si vous ajoutez ceci à votre rénovation , vous obtenez maintenant une autre erreur:

 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 

C’est également une erreur bien connue que vous pouvez trouver ici (cela signifie que la réponse de votre serveur n’est pas bien formatée); Donc, changez la réponse du serveur pour qu’il retourne après:

 { android:[ { ver:"1.5", name:"Cupcace", api:"Api Level 3" } ... ] } 

Pour une meilleure compréhension, comparez votre réponse avec Github api .

Suggestion : pour savoir ce qui se passe dans votre request/response ajoutez HttpLoggingInterceptor dans votre mise à niveau .

Sur la base de cette réponse, votre ServiceHelper serait:

 private ServiceHelper() { httpClient = new OkHttpClient.Builder(); HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); httpClient.interceptors().add(interceptor); Retrofit retrofit = createAdapter().build(); service = retrofit.create(IService.class); } 

N’oubliez pas non plus d’append:

 comstack 'com.squareup.okhttp3:logging-interceptor:3.3.1' 

En outre, ce problème se produit lorsque le type de contenu de réponse n’est pas application/json . Dans mon cas, la réponse contenttype était text/html et j’ai rencontré ce problème. Je l’ai changé en application/json puis cela a fonctionné.

J’ai été confronté à ce problème et j’ai fait des recherches et n’ai rien obtenu, alors j’ai essayé et finalement, je connaissais la cause de ce problème. le problème sur l’API, assurez-vous que vous avez un bon nom de variable J’ai utilisé $ start_date et il a causé le problème, alors j’essaye $ startdate et ça marche!

assurez-vous également d’envoyer tous les parameters déclarés sur l’API, par exemple $ startdate = $ _POST [‘startdate’]; $ enddate = $ _POST [‘enddate’];

vous devez passer ces deux variables de la modernisation.

De même, si vous utilisez la date sur une instruction SQL, essayez de la placer à l’intérieur de «like» 2017-07-24 ‘

J’espère que ça t’aide.