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

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

Este es mi fragmento:

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(), "دستگاه شما به اینترنت متصل نیست!", 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(); } 

un

Esto es problema conocido y basado en 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 retrofit ahora le da otro error:

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

Esto también es un error bien conocido que puedes encontrar aquí (esto significa que tu respuesta del servidor no está bien formateada); Por lo tanto, cambie la respuesta del servidor al siguiente retorno:

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

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

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

Con base en 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); } 

También no olvide agregar:

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

Me he enfrentado a este problema y hice investigaciones y no obtuve nada, así que estaba tratando y, finalmente, sabía la causa de este problema. El problema en la API, asegúrese de tener un buen nombre de variable que usé $ start_date y causó el problema, así que intento $ startdate y funciona!

Así que asegúrese de enviar todos los parámetros que se declaran en la API, por ejemplo, $ startdate = $ _POST ['startdate']; $ Enddate = $ _POST ['enddate'];

Usted tiene que pasar esta dos variables de la retrofit.

También si se utiliza la fecha en la instrucción SQL, trate de ponerlo dentro de '' como '2017-07-24'

Espero que esto te ayude.

  • RxJava y Retrofit2: NetworkOnMainThreadException
  • Solicitud POST con Retrofit dando 500
  • Error de petición Uber
  • Retrofit 2.x: Cabecera de registro para la solicitud y la respuesta
  • Retrofit 2 + Rxjava error de manipulación
  • Excepción de tubería rota (fallo de envío: EPIPE (tubo roto)) en retrofit
  • Cookie de sesión no es persistente en Retrofit Android
  • Cargar archivos en el servidor mediante retroadaptación
  • RxAndroid & Retrofit Mejor aproximación para el manejo de errores
  • ¿Cómo depurar errores de CONVERSIÓN de Retrofit con un JsonDeserializer personalizado?
  • Retrofit 2.0 java.lang.IllegalStateException: Se esperaba BEGIN_ARRAY pero era STRING
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.