Apa kesalahan ini? Bagaimana cara memperbaikinya? Aplikasi saya berjalan tetapi tidak dapat memuat data. Dan ini adalah Kesalahan saya: Gunakan JsonReader.setLenient (true) untuk menerima format JSON yang salah pada baris 1 kolom 1 jalur $
Ini fragmen saya:
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();
}
MEMPERBARUI
selalu kesalahan ini bukan tentang json Anda, itu bisa jadi dari permintaan Anda yang salah, untuk lebih baik menangani terlebih dahulu periksa permintaan Anda di tukang pos jika Anda mendapat respons kemudian bandingkan respons json Anda dengan model Anda jika tidak ada yang salah maka kesalahan ini berasal dari permintaan Anda yang salah, juga bisa terjadi jika tanggapan Anda tidak josn (dalam beberapa kasus, tanggapan dapat berupa html)
response.body()
System.out.println
, Iya? Di Android Anda dapat menggunakanLog
kelas, tetapi itu tidak masalah. Anda tidak mendapatkan data atau kesalahan terjadi pada atau sekitarJSONResponse jsonResponse = response.body();
. Saya tidak tahu bagaimana memperbaiki kesalahan Anda karena itu mungkin terkait jaringan. Anda harus bisa memeriksa nilai itu sendiri.Jawaban:
Ini adalah masalah umum dan berdasarkan jawaban ini Anda dapat menambahkan
setLenient
:Sekarang, jika Anda menambahkan ini ke retrofit Anda , ini memberi Anda kesalahan lain:
Ini adalah kesalahan terkenal lainnya yang dapat Anda temukan jawabannya di sini (kesalahan ini berarti respons server Anda tidak diformat dengan baik); Jadi ubah respons server untuk mengembalikan sesuatu:
Untuk pemahaman yang lebih baik, bandingkan respons Anda dengan Github api .
Saran : untuk mencari tahu apa yang terjadi dengan Anda
request/response
addHttpLoggingInterceptor
di Anda retrofit .Berdasarkan jawaban ini ServiceHelper Anda akan menjadi:
Juga jangan lupa untuk menambahkan:
sumber
Juga masalah ini terjadi ketika respon contenttype tidak
application/json
. Dalam kasus saya, jenis konten respons adalahtext/html
dan saya menghadapi masalah ini. Saya mengubahnya menjadiapplication/json
kemudian berhasil.sumber
Ada kesalahan dalam memahami return Type Just add Header dan itu akan menyelesaikan masalah Anda
sumber
Saya mengalami masalah yang sama dengan https://stackoverflow.com/a/57245058/8968137 dan keduanya diselesaikan setelah memperbaiki google-services.json
sumber
Dalam kasus saya ; apa yang memecahkan masalah saya adalah .....
Anda mungkin memiliki json seperti ini, kuncinya tanpa " kutipan ganda ....
Jadi, coba Validator Json online mana pun untuk memastikan Anda memiliki sintaks yang benar ...
Json Validator Online
sumber
Menggunakan Moshi:
Saat membuat Retrofit Service, tambahkan .asLenient () ke MoshiConverterFactory. Anda tidak membutuhkan ScalarsConverter. Seharusnya terlihat seperti ini:
sumber
Saya telah menghadapi masalah ini dan saya melakukan penelitian dan tidak mendapatkan apa-apa, jadi saya mencoba dan akhirnya, saya tahu penyebab masalah ini. masalah di API, pastikan Anda memiliki nama variabel yang bagus Saya menggunakan $ start_date dan itu menyebabkan masalah, jadi saya mencoba $ startdate dan berhasil!
juga pastikan Anda mengirimkan semua parameter yang dideklarasikan di API, misalnya, $ startdate = $ _POST ['startdate']; $ tanggal akhir = $ _POST ['tanggal akhir'];
Anda harus melewatkan dua variabel ini dari retrofit.
juga jika Anda menggunakan tanggal pada pernyataan SQL, coba masukkan ke dalam '' seperti '2017-07-24'
Saya harap ini membantu Anda.
sumber
Masalah ini mulai terjadi pada saya secara tiba-tiba, jadi saya yakin, mungkin ada alasan lain. Saat menggali lebih dalam, itu adalah masalah sederhana di mana saya menggunakan
http
BaseUrl of Retrofit, bukanhttps
. Jadi mengubahnya untukhttps
memecahkan masalah bagi saya.sumber
Yang juga patut diperiksa adalah apakah ada kesalahan dalam jenis kembalian metode antarmuka Anda. Saya dapat mereproduksi masalah ini dengan memiliki tipe pengembalian yang tidak diinginkan seperti
Call<Call<ResponseBody>>
sumber
Saya memecahkan masalah ini dengan sangat mudah setelah mengetahui ini terjadi ketika Anda tidak mengeluarkan objek JSON yang tepat, saya hanya menggunakan
echo json_encode($arrayName);
alih - alihprint_r($arrayName);
With api php saya.Setiap bahasa pemrograman atau setidaknya sebagian besar bahasa pemrograman harus memiliki versi
json_encode()
danjson_decode()
fungsinya masing-masing.sumber