0

oooooops:|Android volley requestString返回null onResponse

爲什麼NULL?

服務器端正在修復。

所有方法都修復。

爲什麼NULL?類似的代碼工作,但這個代碼不工作。全部logs是確定的。

fragmet對話框

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.player_artists_dialog, container, false); 

    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    getDialog().setCancelable(true); 

    model = this.getArguments().getParcelable("model"); 

    progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar); 
    listView = (ListView) rootView.findViewById(R.id.listView); 

    listView.setVisibility(View.INVISIBLE); 
    progressBar.setVisibility(View.VISIBLE); 

    StringRequest request = new StringRequest(Request.Method.POST, 
      ".. url ..", 

      new Response.Listener<String>() { 

       @Override 
       public void onResponse(String response) { 

        Toast.makeText(getContext(), response, Toast.LENGTH_LONG).show(); // show null 

       } 
      }, 

      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError ex) { 
       } 
      }) { 

     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> params = new HashMap<>(); 
      params.put("a", String.valueOf(model.getTr())); 
      params.put("b", String.valueOf(model.getCat())); 
      return params; 
     } 

    }; 

    RequestQueue queue = VolleySingleton.getInstance().getRequestQueue(); 
    queue.add(request); 

    return rootView; 
} 

但在這個params爲工作:

@Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> params = new HashMap<>(); 
      params.put("a", "104"); 
      params.put("b", "1"); 
      return params; 
     } 

在輸出日誌是真實的:

String.valueOf(model.getTr()); // 104 is true 
String.valueOf(model.getCat()); // 1 is true 

爲什麼NULL ???? ?

回答

3
use this 
String crappyPrefix = "null"; 

if(result.startsWith(crappyPrefix)){ 
    result = result.substring(crappyPrefix.length(), result.length()); 
} 
JSONObject jo = new JSONObject(result); 
+0

這不是問題。服務器正確的傑森代碼和修復。我遷移到「改造」。 f * ck凌空。感謝評論。 – grizzly

+0

如果這有助於解決您的問題,請將其標記爲已接受。 –

-1
Use to import self-signed SSL certificate to Volley on Android 4.1+ 
It will make volley to Trust all SSL certificates 
I hope it will work. 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.player_artists_dialog, container, false); 

    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    getDialog().setCancelable(true); 

    model = this.getArguments().getParcelable("model"); 

    progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar); 
    listView = (ListView) rootView.findViewById(R.id.listView); 

    listView.setVisibility(View.INVISIBLE); 
    progressBar.setVisibility(View.VISIBLE); 

     //use trustAllCertificates here. 
    trustAllCertificates(); 


    StringRequest request = new StringRequest(Request.Method.POST, 
      ".. url ..", 

      new Response.Listener<String>() { 

       @Override 
       public void onResponse(String response) { 

        Toast.makeText(getContext(), response, Toast.LENGTH_LONG).show(); // show null 

       } 
      }, 

      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError ex) { 
       } 
      }) { 

     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> params = new HashMap<>(); 
      params.put("a", String.valueOf(model.getTr())); 
      params.put("b", String.valueOf(model.getCat())); 
      return params; 
     } 

    }; 

    RequestQueue queue = VolleySingleton.getInstance().getRequestQueue(); 
    queue.add(request); 

    return rootView; 
} 
private void trustAllCertificates() { 
     try { 
      TrustManager[] trustAllCerts = new TrustManager[] { 
        new X509TrustManager() { 
         public X509Certificate[] getAcceptedIssuers() { 
          X509Certificate[] myTrustedAnchors = new X509Certificate[0]; 
          return myTrustedAnchors; 
         } 

         @Override 
         public void checkClientTrusted(X509Certificate[] certs, String authType) {} 

         @Override 
         public void checkServerTrusted(X509Certificate[] certs, String authType) {} 
        } 
      }; 

      SSLContext sc = SSLContext.getInstance("SSL"); 
      sc.init(null, trustAllCerts, new SecureRandom()); 
      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
      HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { 
       @Override 
       public boolean verify(String arg0, SSLSession arg1) { 
        return true; 
       } 
      }); 
     } catch (Exception e) { 
     } 
    } 
+0

我嘗試'trustAllCertificates()',但沒有奏效。返回null – grizzly

+0

logcat check logcat中顯示的任何錯誤消息。 –

+0

'org.json.JSONException:類型org.json.JSONObject $ 1的值爲null無法轉換爲JSONArray'警告logcat – grizzly