Что это за ошибка? Как я могу это исправить? Мое приложение работает, но не может загружать данные. И это моя ошибка: используйте JsonReader.setLenient (true), чтобы принять искаженный JSON в строке 1, столбец 1, путь $
Это мой фрагмент:
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();
}
ОБНОВИТЬ
всегда эта ошибка не связана с вашим json, это может быть связано с вашим неправильным запросом, для лучшей обработки сначала проверьте свой запрос в почтальоне, если вы получили ответ, затем сравните свой ответ json с вашей моделью, если все в порядке, тогда эта ошибка возникла из-за вашего неправильного запроса, также это могло произойти, когда ваш ответ не josn (в некоторых случаях ответ может быть html)
response.body()
System.out.println
, да? В Android вы можете использовать этотLog
класс, но это не имеет значения. Вы не получаете данные или происходит ошибка поблизости или поблизостиJSONResponse jsonResponse = response.body();
. Я не знаю, как исправить вашу ошибку, потому что это может быть связано с сетью. Вы должны суметь проверить это значение самостоятельно.Ответы:
Это хорошо известная проблема, и на основе этого ответа вы можете добавить
setLenient
:Теперь, если вы добавите это в свою модернизацию , это даст вам еще одну ошибку:
Это еще одна хорошо известная ошибка, ответ на которую вы можете найти здесь (эта ошибка означает, что ответ вашего сервера имеет неправильный формат); Поэтому измените ответ сервера, чтобы что-то вернуть:
Для лучшего понимания сравните свой ответ с Github api .
Предложение : узнать, что происходит с вашим
request/response
дополнениемHttpLoggingInterceptor
при модернизации .На основании этого ответа ваш ServiceHelper будет:
Также не забудьте добавить:
источник
Также эта проблема возникает, когда тип содержимого ответа - нет
application/json
. В моем случае тип содержимого ответа был,text/html
и я столкнулся с этой проблемой. Я изменил его, чтобыapplication/json
он работал.источник
Произошла ошибка в понимании возвращаемого типа. Просто добавьте заголовок, и это решит вашу проблему.
источник
У меня была такая же проблема вместе с https://stackoverflow.com/a/57245058/8968137, и обе были решены после исправления google-services.json
источник
В моем случае ; что решило мою проблему ...
У вас может быть такой json, ключи без " двойных кавычек ...."
Поэтому попробуйте любой онлайн-валидатор Json, чтобы убедиться, что у вас правильный синтаксис ...
Json Validator онлайн
источник
Использование Moshi:
При создании службы модернизации добавьте .asLenient () в свой MoshiConverterFactory. Вам не нужен ScalarsConverter. Это должно выглядеть примерно так:
источник
Я столкнулся с этой проблемой, провел исследование и ничего не получил, поэтому я пытался и, наконец, я знал причину этой проблемы. проблема в API, убедитесь, что у вас правильное имя переменной. Я использовал $ start_date, и это вызвало проблему, поэтому я пробую $ startdate, и он работает!
также убедитесь, что вы отправили все параметры, которые объявляются в API, например, $ startdate = $ _POST ['startdate']; $ enddate = $ _POST ['дата окончания'];
вы должны передать эти две переменные из модификации.
также, если вы используете дату в операторе SQL, попробуйте поместить его внутри '', например, '2017-07-24'
Надеюсь, это вам поможет.
источник
Эта проблема стала возникать у меня внезапно, поэтому я был уверен, что может быть другая причина. Если копнуть глубже, это была простая проблема, когда я использовал
http
в BaseUrl of Retrofit вместоhttps
. Поэтому изменив его, чтобыhttps
решить проблему для меня.источник
Также стоит проверить, есть ли ошибки в типе возврата ваших методов интерфейса. Я мог бы воспроизвести эту проблему, указав непреднамеренный тип возврата, например
Call<Call<ResponseBody>>
источник
Я решил эту проблему очень легко, узнав, что это происходит, когда вы не выводите правильный объект JSON, я просто использовал
echo json_encode($arrayName);
вместоprint_r($arrayName);
с моим php api.Каждый язык программирования или , по крайней мере , большинство языков программирования должен иметь свою собственную версию
json_encode()
иjson_decode()
функции.источник