这个错误是什么?我怎样才能解决这个问题?我的应用程序正在运行,但无法加载数据。这是我的错误:使用JsonReader.setLenient(true)在第1行第1列路径$接受格式错误的JSON
这是我的片段:
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();
}
使用Moshi:
在构建改装服务时添加。对你最重要的工厂宽容一点。你不需要ScalarsConverter。应该是这样的:
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(ENDPOINT)
.addConverterFactory(MoshiConverterFactory.create().asLenient())
.build()
.create(UserService::class.java)
当响应contenttype不是application/json
时,也会出现此问题。在我的例子中,响应内容类型是text/html
,我面临这个问题。我把它改成了application/json
,然后它就工作了。
这是一个众所周知的问题,根据这个答案,您可以添加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" }
...
]
}
为了更好地理解,请将您的响应与Github api进行比较。
建议:要了解您的请求/响应发生了什么
请在您的改装中添加HttpLoggingInterceptor
。
基于此答案,您的ServiceHelper将是:
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'
我想通过php party将数据添加到MySQL。但是我一直失败。检查网站上的数据。仍然没有解决方案。我哪里出错了? 我尝试了以下方法,但似乎无法解决问题。如何修复“使用JsonReader”。setLenient(true)在Android Studio中的第1行第1列path$'错误处接受格式错误的JSON,并使用JsonReader。setLenient(true)在第1行第1列路径接受格式
当我尝试访问我的Web服务,在onFailure我得到在LogCat. i可以从POSTMAN得到响应 这是邮差的回复 在线更新 方法 PHP服务响应 UpdateOrderResponse模块类 使现代化 我添加了以进行改装。就像下面 然后得到另一个错误在它是
我试图将数据发布到API,但出现以下错误: 使用JsonReader。setLenient(true)在第1行第1列路径接受格式错误的JSON$ 有人知道怎么解决这个问题吗? 在活动中发布数据的代码 Api接口。JAVA 邮寄ist.java API应该返回
试图使用Refundation以JSON格式发送信息,但它进入Refundation的方法并抛出以下错误: 到目前为止,我已经尝试使用以下链接中的答案来解决这个问题:1)改型API异常?2) 使用JsonReader。setLenient(true)在第1行第1列路径接受格式错误的JSON$ 这是我的代码: 改装接口: 与连接相关的主要活动: 用户类别: 服务器端希望JSON如下所示: 我知道st
我正在尝试为我的应用程序创建忘记密码脚本。当我运行我的apk并尝试保留我的密码时,我得到了一个错误,上面写着使用JsonReader。setLenient(true)要在第1行第1列路径$Error处接受格式错误的JSON,我的apk中一切正常,我可以登录、注销或注册,但当我重置密码时,我得到了JsonReader。设置宽容(真)错误。我的apk json正在工作,它是正确的。请帮帮我。我在分享我
我正在从api struct获取数据时出现了此错误。我查阅了许多网站,以供参考,但我没有得到适当的解决方案 Api接口。JAVA 主要活动。JAVA 这是json数据 错误堆栈