JsonReader를 사용합니다.setLenient(true)가 행 1 열 1 경로 $에서 잘못된 형식의 JSON을 받아들입니다.
이 에러는 무엇입니까?어떻게 하면 고칠 수 있을까요?앱이 실행 중이지만 데이터를 로드할 수 없습니다.그리고 이것은 나의 오류입니다.JsonReader를 사용합니다.setLenient(true)가 행 1 열 1 경로 $에서 잘못된 형식의 JSON을 받아들입니다.
이것은 나의 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(), "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에 관한 것이 아니라 잘못된 http 요청일 수 있습니다.헤더가 누락되거나 잘못된 경우 먼저 서버 응답과 서버 응답 헤더를 확인하기 위해 우편 배달원과 함께 요청을 확인합니다. 문제가 없다면 오류는 대부분 프로그래밍된 http 요청에서 비롯됩니다.또, 서버의 응답이 json이 아니기 때문에(경우에 따라서는 응답이 html이 될 수 있습니다).
이것은 잘 알려진 문제이며, 이 답변을 바탕으로 추가할 수 있습니다.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와 비교합니다.
권장사항: 고객님의 고객님의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'
, 이는, 응답 이 「」이 경우에 합니다.application/json
응답 ★★★★★★★★★★★★★★★★★★★★★★★★.text/html
그리고 난 이 문제에 직면했다.는 그것을 ㅇㅇㅇㅇㅇㅇㅇ로 요.application/json
효과가 있었어요
Moshi 사용:
Retrofit 서비스를 구축할 때 MoshiConverterFactory에 .asLenient()를 추가합니다.Scalars Converter는 필요 없습니다.다음과 같이 표시됩니다.
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(ENDPOINT)
.addConverterFactory(MoshiConverterFactory.create().asLenient())
.build()
.create(UserService::class.java)
리턴 타입을 이해하는 중에 오류가 발생하였습니다.헤더만 추가하면 문제가 해결됩니다.
@Headers("Content-Type: application/json")
저는 https://stackoverflow.com/a/57245058/8968137과 같은 문제가 있었고, 구글 서비스를 수정한 후에 둘 다 해결되었습니다.
Retrofit에 @Headers("Accept: application/json")를 추가하는 것을 잊어버리고 http 페이지에서 html을 바디레이저 json으로 리다이렉트했습니다.
나는 이 문제에 직면했고 조사를 했지만 아무것도 얻지 못했기 때문에 노력했고 마침내 이 문제의 원인을 알게 되었다.API의 문제, $start_date를 사용한 변수 이름이 맞는지 확인해 주세요.그 때문에 문제가 발생했기 때문에 $startdate를 시도하면 동작합니다.
또한 API에서 선언하는 모든 파라미터(예: $startdate = $_POST['startdate'], $enddate = $_POST['enddate'])를 전송해야 합니다.
개조에서 이 두 변수를 통과시켜야 합니다.
SQL 문에 날짜를 사용하는 경우에도 '2017-07-24'와 같이 ''에 넣어보세요.
도움이 됐으면 좋겠네요.
내 경우; 내 문제를 해결한 것은...
이런 json이 있을 수도 있고, 열쇠는 이중 따옴표 없이...
{ name: "test", 전화: "2324234" }
온라인 Json Validator를 사용하여 올바른 구문이 있는지 확인하십시오.
JSON 오브젝트를 제대로 출력하지 않을 때 이 문제가 발생한다는 것을 알게 된 후 저는 이 문제를 매우 쉽게 해결했습니다.단순히 사용하였습니다.echo json_encode($arrayName);
대신print_r($arrayName);
내 php api로.
모든 프로그래밍 언어 또는 적어도 대부분의 프로그래밍 언어에는 자체 버전인json_encode()
그리고.json_decode()
기능들.
갑자기 이 문제가 발생했기 때문에 뭔가 다른 이유가 있을 수 있다고 생각했습니다.깊이 파고들 때, 그것은 내가 사용한 간단한 문제였다.http
대신 Retrofit의 BaseUrl에서https
그래서 그걸 로 바꾸면https
문제를 해결해 주셨어요.
또, 인터페이스 메서드의 반환 타입에 에러가 없는지도 확인할 필요가 있습니다.다음과 같은 의도하지 않은 반품 유형을 사용함으로써 이 문제를 재현할 수 있습니다.Call<Call<ResponseBody>>
Relative 링크가 Base URL의 데이터를 찾을 수 없기 때문에 오류가 표시될 수 있습니다.같은 문제가 발생하여 상대 URL과 기본 URL 사이에 오류가 없는지 확인했습니다.
나는 3시간 정도 시간을 보낸 후에 이 문제를 해결한다.API 테스트에 우체부를 사용했습니다.json 출력에 오류가 있었습니다.자세한 내용은 이미지를 참조해 주세요(출력 미리보기가 이미지 설명 입력에서 HTML로 변경되었을 때 이 오류가 발생했습니다).
언급URL : https://stackoverflow.com/questions/39918814/use-jsonreader-setlenienttrue-to-accept-malformed-json-at-line-1-column-1-path
'programing' 카테고리의 다른 글
angular 2 typecript 앱에서 memant.js 라이브러리를 사용하는 방법? (0) | 2023.04.02 |
---|---|
프로파일을 사용하여 도커에서 스프링 부트 애플리케이션을 시작하려면 어떻게 해야 합니까? (0) | 2023.04.02 |
WordPress 기본 위젯 파일 또는 기능은 어디에 있습니까? (0) | 2023.04.02 |
MongoDB 컬렉션의 변경 내용을 청취하는 방법 (0) | 2023.04.02 |
스프링 MVC - Http Media Type Not Acceptable예외. (0) | 2023.04.02 |