web-dev-qa-db-fra.com

Utilisez JsonReader.setLenient (true) pour accepter les fichiers JSON mal formés à la ligne 1, colonne 1, 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 voici mon erreur: utilisez JsonReader.setLenient (true) pour accepter les fichiers JSON mal formés à la ligne 1, colonne 1, chemin $ 

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

 a

METTRE À JOUR

toujours cette erreur pas à propos de votre JSON, il pourrait devenir de votre tort request, pour un meilleur traitement, commencez par vérifier votre demande dans le facteur si vous avez une réponse, puis comparez votre réponse json avec votre modèle si rien n’est faux, cette erreur provient de votre mauvaise demande 

56
erfan

Ceci est un problème bien connu et basé sur ceci vous pouvez ajouter setLenient:

Gson gson = new GsonBuilder()
        .setLenient()
        .create();

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

Maintenant, si vous ajoutez ceci à votre retrofit, cela vous donnera une autre erreur:

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

Ceci est une autre erreur connue que vous pouvez trouver avec la réponse ici (cette erreur signifie que la réponse de votre serveur n’est pas correctement formatée); Alors changez la réponse du serveur pour retourner quelque chose:

{
    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 adaptation ultérieure.

Basé sur ceci répondre 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 d'ajouter:

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

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

7
Ali Gürelli

J'ai eu le même problème avec https://stackoverflow.com/a/57245058/8968137 et les deux résolus après la correction du google-services.json

2
Raj

Il y avait une erreur dans la compréhension du type de retour Ajoutez simplement Header et cela résoudra votre problème

@Headers("Content-Type: application/json")
0
Jahanzaib

si vos formats JSON sont corrects, vérifiez vos requêtes de base de données. Essayez de les changer et réessayez

0
Shabbir Ahmed

Ce problème a commencé à se produire soudainement pour moi, alors j'étais sûr qu'il pourrait y avoir une autre raison. En creusant profondément, c’était un problème simple dans lequel j’avais utilisé http dans BaseUrl of Retrofit au lieu de https. Donc, le changer en https a résolu le problème pour moi.

0
Shubhral

Dans mon cas ; ce qui a résolu mon problème était .....

Vous pouvez avoir json comme ça, les clés sans "double citations ....".

{nom: "test", téléphone: "2324234"}

Essayez donc n'importe quel validateur Json en ligne pour vous assurer que vous avez la bonne syntaxe ...

Json Validator Online

0
shareef

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'ai essayé $ startdate et ça marche!

assurez-vous également que vous envoyez tous les paramètres déclarés dans l'API, par exemple, $ startdate = $ _POST ['startdate']; $ enddate = $ _POST ['enddate'];

vous devez passer ces deux variables de la modification.

de même, si vous utilisez Date dans une instruction SQL, essayez de la mettre à l'intérieur '' like '2017-07-24'

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

0
Momen Zaqout