Quelle est cette erreur? Comment puis-je réparer cela? Mon application est en cours d'exécution mais ne parvient pas à charger les données. Et voici mon erreur: utilisez JsonReader.setLenient (true) pour accepter JSON malformé à la ligne 1, colonne 1 chemin $
Voici mon 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();
}
METTRE À JOUR
toujours cette erreur ne concerne pas votre json, cela pourrait provenir de votre mauvaise demande, pour une meilleure gestion, vérifiez d'abord votre demande au facteur si vous avez une réponse, puis comparez votre réponse json avec votre modèle si rien ne va pas, cette erreur provient de votre mauvaise demande, cela peut également arriver lorsque votre réponse n'est pas josn (dans certains cas, la réponse peut être html)
response.body()
System.out.println
, Oui? Dans Android, vous pouvez utiliser laLog
classe, mais cela n'a pas d'importance. Vous n'obtenez pas de données ou une erreur se produit à ou autourJSONResponse jsonResponse = response.body();
. Je ne sais pas comment corriger votre erreur car cela pourrait être lié au réseau. Vous devriez être en mesure d'inspecter cette valeur par vous-même.Réponses:
Il s'agit d'un problème bien connu et sur la base de cette réponse, vous pouvez ajouter
setLenient
:Maintenant, si vous ajoutez ceci à votre rénovation , cela vous donne une autre erreur:
C'est une autre erreur bien connue à laquelle vous pouvez trouver une réponse ici (cette erreur signifie que la réponse de votre serveur n'est pas bien formatée); Alors changez la réponse du serveur pour renvoyer quelque chose:
Pour une meilleure compréhension, comparez votre réponse avec l' API Github .
Suggestion : pour savoir ce qui se passe avec votre
request/response
ajoutHttpLoggingInterceptor
dans votre rénovation .Sur la base de cette réponse, votre ServiceHelper serait:
N'oubliez pas non plus d'ajouter:
la source
Ce problème se produit également lorsque le type de contenu de la réponse ne l'est pas
application/json
. Dans mon cas, le type de contenu de réponse étaittext/html
et j'ai rencontré ce problème. Je l'ai changé pour queapplication/json
cela fonctionne.la source
Il y a eu une erreur dans la compréhension du type de retour Ajoutez simplement l'en-tête et cela résoudra votre problème
la source
J'ai eu le même problème avec https://stackoverflow.com/a/57245058/8968137 et les deux résolus après avoir corrigé le google-services.json
la source
Dans mon cas ; ce qui a résolu mon problème était .....
Vous pouvez avoir json comme ça, les touches sans " guillemets doubles ....
Alors essayez n'importe quel validateur Json en ligne pour vous assurer que vous avez la bonne syntaxe ...
Validateur Json en ligne
la source
Utilisation de Moshi:
Lors de la création de votre service de rénovation, ajoutez .asLenient () à votre MoshiConverterFactory. Vous n'avez pas besoin d'un ScalarsConverter. Ça devrait ressembler a quelque chose comme ca:
la source
J'ai fait face à ce problème et j'ai fait des recherches et je n'ai rien obtenu, alors j'essayais 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 cela a causé le problème, alors j'essaye $ startdate et ça marche!
assurez-vous également d'envoyer tous les paramètres déclarés sur l'API, par exemple $ startdate = $ _POST ['startdate']; $ enddate = $ _POST ['enddate'];
vous devez transmettre ces deux variables de la modernisation.
ainsi si vous utilisez la date sur l'instruction SQL, essayez de la mettre à l'intérieur de '' comme '2017-07-24'
J'espère que ça t'aide.
la source
Ce problème a commencé à se produire pour moi tout d'un coup, donc j'étais sûr qu'il pourrait y avoir une autre raison. En creusant profondément, c'était un problème simple où j'ai utilisé
http
dans BaseUrl de Retrofit au lieu dehttps
. Donc, le changer pourhttps
résoudre le problème pour moi.la source
Il vaut également la peine de vérifier s'il y a des erreurs dans le type de retour de vos méthodes d'interface. Je pourrais reproduire ce problème en ayant un type de retour non intentionnel comme
Call<Call<ResponseBody>>
la source
J'ai résolu ce problème très facilement après avoir découvert que cela se produisait lorsque vous ne produisiez pas un objet JSON approprié, j'ai simplement utilisé le à la
echo json_encode($arrayName);
place deprint_r($arrayName);
Avec mon api php.Chaque langage de programmation ou au moins la plupart des langages de programmation doivent avoir leur propre version des fonctions
json_encode()
etjson_decode()
.la source