¿Qué 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 con formato incorrecto en la línea 1, columna 1, ruta $
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(), "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();
}
ACTUALIZAR
siempre este error no se trata de su json, podría deberse a su solicitud incorrecta, para un mejor manejo, primero verifique su solicitud en cartero si recibió una respuesta, luego compare su respuesta json con su modelo si no hay nada malo, entonces este error proviene de su solicitud incorrecta, también podría suceder cuando su respuesta no sea josn (en algunos casos, la respuesta podría ser html)
response.body()
System.out.println
, ¿si? En Android puedes usar laLog
clase, pero eso no importa. No está obteniendo datos o se está produciendo un error en o alrededorJSONResponse jsonResponse = response.body();
. No sé cómo solucionar su error porque podría estar relacionado con la red. Debería poder inspeccionar ese valor por su cuenta.Respuestas:
Este es un problema bien conocido y, según esta respuesta, podría agregar
setLenient
:Ahora, si agrega esto a su actualización , le da otro error:
Este es otro error bien conocido que puede encontrar la respuesta aquí (este error significa que la respuesta de su servidor no está bien formateada); Así que cambie la respuesta del servidor para devolver algo:
Para una mejor comprensión, compare su respuesta con la api de Github .
Sugerencia : para averiguar qué está pasando con su
request/response
complementoHttpLoggingInterceptor
en su actualización .Según esta respuesta, su ServiceHelper sería:
Además, no olvide agregar:
fuente
Además, este problema se produce cuando el tipo de contenido de respuesta no lo es
application/json
. En mi caso, el tipo de contenido de respuesta fuetext/html
y me enfrenté a este problema. Lo cambié paraapplication/json
que funcionó.fuente
Hubo un error en la comprensión del tipo de devolución.Simplemente agregue el encabezado y resolverá su problema
fuente
Tuve el mismo problema junto con https://stackoverflow.com/a/57245058/8968137 y ambos se resolvieron después de arreglar google-services.json
fuente
En mi caso ; lo que resolvió mi problema fue .....
Es posible que tenga json como este, las claves sin " comillas dobles ...
Así que pruebe cualquier Json Validator en línea para asegurarse de tener la sintaxis correcta ...
Json Validator en línea
fuente
Usando Moshi:
Cuando cree su servicio de modificación, agregue .asLenient () a su MoshiConverterFactory. No necesitas un ScalarsConverter. Debería verse algo como esto:
fuente
Me enfrenté a este problema e hice una investigación y no obtuve nada, así que lo intenté y finalmente supe la causa de este problema. el problema en la API, asegúrese de tener un buen nombre de variable. Usé $ start_date y causó el problema, así que pruebo $ startdate y ¡funciona!
también asegúrese de enviar todos los parámetros que declaran en la API, por ejemplo, $ startdate = $ _POST ['startdate']; $ fecha final = $ _POST ['fecha final'];
tienes que pasar estas dos variables de la modificación.
Además, si usa la fecha en la declaración SQL, intente ponerla dentro de '' como '2017-07-24'
Espero que te ayude.
fuente
Este problema comenzó a ocurrirme de repente, así que estaba seguro de que podría haber alguna otra razón. Al profundizar, fue un problema simple donde usé
http
en BaseUrl de Retrofit en lugar dehttps
. Así que cambiarlo parahttps
resolver el problema para mí.fuente
También vale la pena verificar si hay algún error en el tipo de retorno de sus métodos de interfaz. Podría reproducir este problema teniendo un tipo de retorno no deseado como
Call<Call<ResponseBody>>
fuente
Resolví este problema muy fácilmente después de descubrir que esto sucede cuando no está generando un objeto JSON adecuado, simplemente usé el en
echo json_encode($arrayName);
lugar deprint_r($arrayName);
With my php api.Todos los lenguajes de programación o al menos la mayoría de los lenguajes de programación deben tener su propia versión de las funciones
json_encode()
yjson_decode()
.fuente