Use JsonReader.setLenient (true) para aceptar JSON malformado en la línea 1 columna 1 path $

¿Cuál es este error? ¿Cómo puedo arreglar esto? Mi aplicación se está ejecutando pero no puede cargar datos. Y este es mi error: use JsonReader.setLenient (true) para aceptar JSON malformado en la línea 1 columna 1 ruta $

Este es mi fragmento:

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

un

Este es un problema conocido y, en función de esta respuesta, debe agregar setLenient :

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

Si agrega esto a su modificación ahora le da otro error:

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

Este es también un error conocido que puede encontrar aquí (esto significa que la respuesta de su servidor no está bien formateada); Así que cambie la respuesta del servidor para devolver lo siguiente:

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

Para una mejor comprensión, compare su respuesta con Github api .

Sugerencia : para saber qué está pasando con su request/response agregue HttpLoggingInterceptor en su HttpLoggingInterceptor .

En función de esta respuesta, su ServiceHelper sería:

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

Además, no olvides agregar:

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

También este problema ocurre cuando el tipo de contenido de respuesta no es application/json . En mi caso, el tipo de contenido de respuesta era text/html y me enfrenté a este problema. Lo cambié a application/json luego funcionó.

Me he enfrentado a este problema e investigué y no obtuve nada, así que lo intenté y, finalmente, supe la causa de este problema. el problema en la API, asegúrate de tener un buen nombre de variable. Usé $ start_date y causó el problema, así que bash $ startdate y funciona.

también asegúrese de enviar todos los parámetros que declaran en la API, por ejemplo, $ startdate = $ _POST [‘startdate’]; $ enddate = $ _POST [‘enddate’];

tienes que pasar esta dos variable de la modificación.

si usas la fecha en la instrucción SQL, intenta ponerla dentro de “me gusta” 2017-07-24 ‘

Espero que te ayude.