Volley 사용 시 Value ¿of type java가 나타납니다.lang.String이 JSONObject 오류로 변환될 수 없습니다.

2415 단어
오늘 이상한 문제가 발생했습니다. 요청한 도메인 이름을 바꾼 후에 서버가 피드백한 데이터를 해석할 수 없습니다!위의 오류를 보면 값을 만들 수 없음을 쉽게 알 수 있습니다.
  • 그런데 이게 잘못이 돼서 이상해요.Android 쪽: 도메인 주소만 바꿨는데 아무것도 안 바꿨어요. 예전 주소는 정상적으로 접근할 수 있어요. 2.백엔드: 복사된 코드이고 같은 서버에 있습니다. 새 도메인 이름만 연결되어 있습니다
  • 중간 교섭에서 나는 요청 주소를 백엔드에 보내고 브라우저를 통해 이 데이터를 방문하면 정상적인 데이터를 표시할 수 있다. 그러나 F12 검사를 통해 반환된 데이터의 머리 괄호 {가 난호로 해석되었다. 그래서 나는 서비스 측의 오류라고 생각했다. 그 자신도 이상하게 생각하고 오류를 찾아갔다. 그는 이전의 도메인 이름만 바꾸면 오류가 없다는 것을 발견했다.
  • 다음날 백엔드 처리가 늦어져 결과가 나오지 않았고 애플 측은 데이터에 정상적으로 접근할 수 있었다!저는 Volley 프레임워크를 다시 보러 갈 수밖에 없습니다. 저는 공식에 따라 결과를 봉인했습니다!
  • public class NormalPostRequest extends Request {    
    private Map mMap;    
    private Response.Listener mListener;    
    public NormalPostRequest(String url, Response.Listener listener, Response.ErrorListener errorListener, Map map) {        
    super(Method.POST, url, errorListener);        
    mListener = listener;        
    mMap = map;   
     }    
    //mMap , ,     
    @Override    
    protected Map getParams() throws AuthFailureError {        return mMap;    }    
    // response json , JsonObjectRequest     
    @Override    
    protected Response parseNetworkResponse(NetworkResponse response) {        
    try {            
    String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));            
    L.i("jsonString=="+jsonString);            
    return Response.success(new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));        
    } catch (UnsupportedEncodingException e) {            
    return Response.error(new ParseError(e));        
    } catch (JSONException je) {            
    return Response.error(new ParseError(je));        
    }    
    }    
    @Override    
    protected void deliverResponse(JSONObject response) {        
    mListener.onResponse(response);    
    }}
    

    나는 이곳에서 json String을 인쇄했는데, 이곳의 데이터가 확실히 혼란스러운 것을 발견했다.그래서 나는 이곳에서
    String jsonString = 
    new String(response.data, HttpHeaderParser.parseCharset(response.headers));```
     
    

    String jsonString = new String(response.data, "utf-8");``` 이게 다야!알 수 있듯이 HttpHeaderParser를 사용합니다.parseCharset(response.headers)에서 인코딩을 설정하는 것은 옳지 않습니다. 적어도 모든 것을 호환할 수 없습니다!이틀 동안 괴롭혔던 문제가 마침내 해결되었으니, 이에 기록하여 같은 기이한 문제가 있는 학우들에게 도움이 되었으면 합니다!

    좋은 웹페이지 즐겨찾기