簡體   English   中英

如何使用Volly發布數據並接收JSON對象

[英]How can I post data with Volly and receive JSON object

我想將一個int張貼到https地址,並將3個JSON對象傳遞到文本視圖,但無法獲取JSON結果。 我嘗試在onResponse中使用方法,但無法正常工作。 如何發布整數並將一些JSON對象解析為文本視圖? 我是Android開發的初學者,但我不知道如何解決此問題。 有什么問題? 請幫忙

    if(isNetworkAvailable()){
        RequestQueue queue = Volley.newRequestQueue(this);
        String url = "https://example.com/api";
        StringRequest postRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<JSONObject>()
                {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {

                            Log.d("Response", response);
                        } catch (JSONException e) {
                            e.printStackTrace();
                            alertUserAboutError();
                        }
                    }
                },
                new Response.ErrorListener()
                {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // error
                        mStoreName.setText("Error");
                    }
                }
        ) {
            @Override
            protected Map<String, String> getParams()
            {
                Map<String, String>  params = new HashMap<String, String>();
                params.put("category_id", "28");

                return params;
            }
        };

        queue.add(postRequest);

    }
        Toast.makeText(this, "Network is unavailable!", Toast.LENGTH_LONG).show(); }
private void updateDisplay() {
    mStoreName.setText(mStoreDetails.getStoreName());
    mInstagram.setText(mStoreDetails.getInstagram());
    mTelegram.setText(mStoreDetails.getTelegram());

}

private StoreDetails getStoreDetails(String jsonData) throws JSONException {
    JSONObject JSONRequest = new JSONObject(jsonData);

    StoreDetails storeDetails = new StoreDetails();
    storeDetails.setStoreName(JSONRequest.getString("store_name"));
    storeDetails.setInstagram(JSONRequest.getString("instagram"));
    storeDetails.setTelegram(JSONRequest.getString("telegram"));

    return storeDetails;
}

private boolean isNetworkAvailable() {
    ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = manager.getActiveNetworkInfo();
    boolean isAvailable = false;
    if (networkInfo != null && networkInfo.isConnected()) {
        isAvailable = true;
    }
    return isAvailable;
}

private void alertUserAboutError() {
    AlertDialogFragment dialog = new AlertDialogFragment();
    dialog.show(getFragmentManager(), "error_dialog");
}

這對我有用。 使用stringrequest將發布數據放入請求中。 調用onResponse之后,我從字符串創建一個JSON對象:

public void doServerRequest(final Context context, final String url, final Map<String,String> postParameters, final HashMap<String,String> getParameters, final OnFinishTaskListener<String, JSONObject> listener){
    Log.d(TAG,"Start new server request (" + url + ")");
    StringRequest request = new StringRequest(Request.Method.POST, addParametersToUrl(url, getParameters), new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d(TAG, response);
            try {
                JSONObject json = new JSONObject(response);
                if (json.getInt(CODE_TAG) == 0){
                    listener.getResult(SUCCESS_TAG, json);
                } else {
                    listener.getResult(ERROR_TAG, null);
                }
            } catch (Exception e){
                e.printStackTrace();
                listener.getResult(ERROR_TAG, null);
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
            listener.getResult(ERROR_TAG, null);
        }
    }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            if(postParameters == null){
                return new HashMap<String, String>();
            }
            return postParameters;
        }
    };
    requestQueue.add(request);
}

這會將get-Paramters添加到URL(如果存在):

private String addParametersToUrl(String url, HashMap<String,String> getParameters){
    if(getParameters == null || getParameters.size() == 0){
        return url;
    }
    Log.d(TAG,"Preparing URL: "+url);
    StringBuilder stringBuilder = new StringBuilder(url);
    stringBuilder.append("?");
    int i = 0;
    for (String key : getParameters.keySet()) {
        if(i>0) stringBuilder.append("&");
        stringBuilder.append(key).append("=").append(getParameters.get(key));
        i++;
    }
    url = stringBuilder.toString();
    Log.d(TAG,"Prepared URL: "+url);
    return url;
}

我使用以下偵聽器界面:

public interface OnFinishTaskListener<S,J> {
    public void getResult(S string, J json);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM