লাইনের 1 কলাম 1 পাতায় ত্রুটিযুক্ত JSON গ্রহণ করতে JsonReader.setLenient (সত্য) ব্যবহার করুন $


112

এই ত্রুটিটি কী? আমি এটা কিভাবে ঠিক করবো? আমার অ্যাপটি চলছে তবে ডেটা লোড করা যাচ্ছে না। এবং এটি আমার ত্রুটি: লস 1 কলাম 1 পাতায় ত্রুটিযুক্ত JSON গ্রহণ করতে JsonReader.setLenient (সত্য) ব্যবহার করুন $

এটি আমার খণ্ড:

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

রিকোয়েস্ট ইন্টারফেস:

public interface RequestInterface {

@GET("Erfan/news.php")
Call<JSONResponse> getJSON();
}

ক

আপডেট করুন (পাঠ্যের নীচে পড়ুন এবং আপনার সমস্যাটি সন্ধান করুন)

  • সর্বদা এই ত্রুটিটি আপনার জাসন সম্পর্কে নয়, এটি আপনার ভুল অনুরোধ থেকে হতে পারে, পোস্টম্যানের জন্য প্রথমে আপনার অনুরোধটি ভালভাবে পরিচালনা করতে পারেন যদি আপনি প্রতিক্রিয়া পেয়ে থাকেন তবে আপনার মডেলটির সাথে আপনার জসন প্রতিক্রিয়াটির তুলনা করুন যদি কিছু ভুল না হয় তবে এই ত্রুটিটি আপনার ভুল অনুরোধ থেকে আসে, এছাড়াও যখন আপনার প্রতিক্রিয়াটি জসন না করা হয়েছিল (কিছু ক্ষেত্রে প্রতিক্রিয়া এইচটিএমএল হতে পারে)

দয়া করে আপনি যে আউটপুটটি পেয়েছেন তা দেখানresponse.body()
ওয়ান ক্রিকেটার te ই

@ ক্রিকেট_০০7 আমি আমার প্রশ্নটি সম্পাদনা করি এবং আমার ফলাফলগুলি দেখায়
ই-জাদ

আমি ছবি চাইনি। আমি আপনাকে সার্ভার থেকে ফিরে আসা মানটি মুদ্রণ করতে বলেছিলাম।
ওয়ানক্রিষ্টের

4
আপনি জাভাতে কোনও মূল্য কীভাবে মুদ্রণ করবেন? System.out.println, হ্যাঁ? অ্যান্ড্রয়েডে আপনি Logক্লাসটি ব্যবহার করতে পারেন তবে তাতে কিছু আসে যায় না। আপনি ডেটা পাচ্ছেন না বা আশেপাশে ত্রুটি ঘটছে JSONResponse jsonResponse = response.body();। আমি জানি না যে কীভাবে আপনার ত্রুটি ঠিক করা যায় এটি নেটওয়ার্কিং সম্পর্কিত হতে পারে। আপনার নিজেরাই সেই মানটি পরীক্ষা করতে সক্ষম হওয়া উচিত।
ওয়ানক্রিষ্টের

আমি কোনও সমর্থক নই, আমি আপনাকে যে কোনও জাভা অ্যাপ্লিকেশনটি ডিবাগ করতে শেখানোর চেষ্টা করছি, অ্যান্ড্রয়েডের পক্ষে নির্দিষ্ট কিছুই নেই
ওয়ানক্রিটিকর

উত্তর:


200

এটি একটি সুপরিচিত সমস্যা এবং এই উত্তরের ভিত্তিতে আপনি যুক্ত করতে পারেন setLenient:

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

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

এখন, আপনি যদি এটি আপনার পুনঃনির্মাণে যোগ করেন তবে এটি আপনাকে আরও একটি ত্রুটি দেয়:

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

এটি অন্য একটি সুপরিচিত ত্রুটি যা আপনি এখানে উত্তর খুঁজে পেতে পারেন (এই ত্রুটির অর্থ আপনার সার্ভারের প্রতিক্রিয়াটি ভাল ফর্ম্যাটেড নয়); সুতরাং কিছু ফেরত দেওয়ার জন্য সার্ভারের প্রতিক্রিয়া পরিবর্তন করুন:

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

আরও ভাল বোঝার জন্য, আপনার প্রতিক্রিয়াটিকে গিথুব এপিআইয়ের সাথে তুলনা করুন ।

প্রস্তাবনা : খুঁজে বের করতে কি আপনার টু ঘটছে request/responseঅ্যাড HttpLoggingInterceptorআপনার রেট্রোফিট

এই উত্তরের ভিত্তিতে আপনার পরিষেবা হেল্পারটি হ'ল :

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

যোগ করতে ভুলবেন না:

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

আমি আমার প্রশ্ন চেহারা সম্পাদনা। তবে একই ত্রুটি দিন: 1 কলাম 1 পাতায় লাইনযুক্ত ত্রুটিযুক্ত JSON গ্রহণ করতে JsonReader.setLenient (সত্য) ব্যবহার করুন $ এছাড়াও প্রশ্নে ত্রুটির ছবি যুক্ত করুন
ই-জাদ

@ ফলান সম্পাদিত উত্তর দেখুন; সমস্যাটি কারণ সার্ভার থেকে আপনার প্রতিক্রিয়া সঠিক নয় ; সরান "অ্যাট্রিবিউট নাম এবং ইস্যু প্রায় সংশোধন করা হবে।
আমির

4
roid android: [{ver: "1.5", নাম: "Cupcace", api: "Api স্তর 3", pic: "pic2.jpg"}]} এটি আমার জাসন হ'ল আপনার উদাহরণের মতো এবং এখনও একই ত্রুটি: '(
ই-জাদ

and "অ্যান্ড্রয়েড": [{"ভার": "1.5", "নাম": "কাপক্যাস", "এপিআই": "স্তর 3", "পিক": "বেন.জেপিজি"}]}, এইভাবে ঠিক করুন
ই - আজাদ

4
এই ব্যবহার এবং তা আপনাকে বলতে হবে অবিলম্বে কেন JSON ভুল jsonlint.com
Saik Caskey

11

এছাড়াও প্রতিক্রিয়া বিষয়বস্তু না থাকলে এই সমস্যাটি ঘটে application/json। আমার ক্ষেত্রে প্রতিক্রিয়া বিষয়বস্তু ছিল text/htmlএবং আমি এই সমস্যার মুখোমুখি হয়েছিল। আমি এটি পরিবর্তন করেছিলাম application/jsonতখন এটি কাজ করেছিল।


7

রিটার্ন টাইপ জাস্ট শিরোনামটি বুঝতে একটি ত্রুটি হয়েছিল এবং এটি আপনার সমস্যার সমাধান করবে

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

এটি আমার জন্য কাজ করে
ভবেশ হিরপাড়া


2

মশি ব্যবহার:

আপনার পুনঃনির্মাণ পরিষেবাটি তৈরি করার সময় আপনার মোশিকনভার্টার কারখানায় .asLenient () যুক্ত করুন। আপনার কোনও স্কেলারস কনভার্টারের দরকার নেই। এটি দেখতে কিছু দেখতে হবে:

return Retrofit.Builder()
                .client(okHttpClient)
                .baseUrl(ENDPOINT)
                .addConverterFactory(MoshiConverterFactory.create().asLenient())
                .build()
                .create(UserService::class.java)

1

আমার ক্ষেত্রে ; আমার সমস্যাটি কী সমাধান হয়েছে .....

আপনার যেমন জাসন থাকতে পারে, " ডাবল কোটেশন .... ছাড়া কীগুলি ....

{নাম: "পরীক্ষা", ফোন: "2324234"}

সুতরাং আপনার কাছে সঠিক সিনট্যাক্স রয়েছে তা নিশ্চিত করতে যে কোনও অনলাইন জসন ভ্যালিডেটর চেষ্টা করুন ...

জসন ভ্যালিডেটর অনলাইন


0

আমি এই সমস্যার মুখোমুখি হয়েছি এবং আমি গবেষণা করেছি এবং কিছুই পেলাম না, তাই আমি চেষ্টা করে যাচ্ছি এবং শেষ পর্যন্ত আমি এই সমস্যার কারণটি জানলাম knew এপিআই-তে সমস্যাটি, নিশ্চিত হয়ে নিন যে আমি ব্যবহার করেছি $ start_date এবং আপনার সমস্যার কারণ হ'ল তাই আমি চেষ্টা করি $ স্টার্টেট এবং এটি কার্যকর!

পাশাপাশি নিশ্চিত করুন যে আপনি সমস্ত প্যারামিটার প্রেরণ করেছেন যা এপিআই-তে ঘোষণা করে, উদাহরণস্বরূপ, $ স্টার্টডেট = $ _POST ['স্টার্টডেট']; $ শেষ তারিখ = $ _POST ['শেষ তারিখ'];

আপনাকে retrofit থেকে এই দুটি ভেরিয়েবল পাস করতে হবে।

পাশাপাশি আপনি যদি এসকিউএল বিবৃতিতে তারিখ ব্যবহার করেন তবে এটি '2017-07-24' এর মতো '' এর ভিতরে রাখার চেষ্টা করুন

আমি এটি আপনাকে সাহায্য করে আশা করি।


0

এই সমস্যাটি হঠাৎ করেই আমার জন্য শুরু হয়ে গেল, তাই আমি নিশ্চিত ছিলাম, অন্য কোনও কারণ থাকতে পারে। গভীর খনন করার সময়, এটি একটি সহজ সমস্যা ছিল যেখানে আমি httpএর পরিবর্তে বেস্রোল অফ রেট্রোফিট ব্যবহার করেছি https। সুতরাং এটি httpsআমার জন্য সমস্যা সমাধানের জন্য পরিবর্তন ।


0

আপনার ইন্টারফেস পদ্ধতির রিটার্ন টাইপের কোনও ত্রুটি আছে কিনা তা পরীক্ষা করে দেখার মতো। আমি অনিচ্ছাকৃত রিটার্নের মতো পছন্দ করে এই সমস্যাটি পুনরুত্পাদন করতে পারিCall<Call<ResponseBody>>


0

আপনি যখন কোনও যথাযথ JSON অবজেক্ট আউটপুট দিচ্ছেন না তখন এটি ঘটে যায় তা খুঁজে পাওয়ার পরে আমি খুব সহজেই এই সমস্যাটি সমাধান করেছি, আমি আমার পিএইচপি এপি এর echo json_encode($arrayName);পরিবর্তে কেবল ব্যবহার print_r($arrayName);করেছি।

প্রতিটি প্রোগ্রামিং ভাষা বা অন্তত সবচেয়ে প্রোগ্রামিং ভাষা এ তাদের নিজস্ব সংস্করণ থাকতে হবে json_encode()এবং json_decode()ফাংশন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.