Не удалось передать параметры сообщения из Android Volley

1

Я следую учебнику по androidhive, но я не могу передавать параметры сообщений, их есть определенные решения, но никто не работал для меня.

PHP-код:

require("config.inc.php");

$organizationname = $_POST['organizationname'];
$date = $_POST["dates"];
//$date = "19-08-2015";
//$organizationname = "xyz123";

//initial query
$query2 = "SELECT rollno,studentname,'$date' FROM 'attendencee' WHERE organizationname = '$organizationname' ";

Как вы видите, есть комментированные переменные, когда я их использую, код работает нормально, но когда я пытаюсь использовать полученные значения, ошибка показывает переменные, которые не определены.

КОД:

public class JsonRequestActivity extends Activity implements OnClickListener {

    private String TAG = JsonRequestActivity.class.getSimpleName();
    private Button btnJsonObj, btnJsonArray;
    private TextView msgResponse;
    private ProgressDialog pDialog;

    // These tags will be used to cancel the requests
    private String tag_json_obj = "jobj_req", tag_json_arry = "jarray_req";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json);

        btnJsonObj = (Button) findViewById(R.id.btnJsonObj);
        btnJsonArray = (Button) findViewById(R.id.btnJsonArray);
        msgResponse = (TextView) findViewById(R.id.msgResponse);

        pDialog = new ProgressDialog(this);
        pDialog.setMessage("Loading...");
        pDialog.setCancelable(false);

        btnJsonObj.setOnClickListener(this);
        btnJsonArray.setOnClickListener(this);
    }

    private void showProgressDialog() {
        if (!pDialog.isShowing())
            pDialog.show();
    }

    private void hideProgressDialog() {
        if (pDialog.isShowing())
            pDialog.hide();
    }

    /**
     * Making json object request
     * */
    private void makeJsonObjReq() {
        showProgressDialog();
        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
                Const.URL_JSON_OBJECT, null,
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d(TAG, response.toString());
                        msgResponse.setText(response.toString());
                        hideProgressDialog();
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d(TAG, "Error: " + error.getMessage());
                        hideProgressDialog();
                    }
                }) {

            /**
             * Passing some request headers
             * */
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json");
                return headers;
            }

            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("dates", "19-08-2015");
                params.put("organizationname", "xyx123");

                return params;
            }

        };

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(jsonObjReq,
                tag_json_obj);

        // Cancelling request
        // ApplicationController.getInstance().getRequestQueue().cancelAll(tag_json_obj);       
    }

    /**
     * Making json array request
     * */
    private void makeJsonArryReq() {
        showProgressDialog();
        JsonArrayRequest req = new JsonArrayRequest(Const.URL_JSON_ARRAY,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());
                        msgResponse.setText(response.toString());
                        hideProgressDialog();
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d(TAG, "Error: " + error.getMessage());
                        msgResponse.setText("Error: " + error.getMessage());
                        hideProgressDialog();
                    }
                });

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(req,
                tag_json_arry);

        // Cancelling request
        // ApplicationController.getInstance().getRequestQueue().cancelAll(tag_json_arry);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnJsonObj:
            makeJsonObjReq();
            break;
        case R.id.btnJsonArray:
            makeJsonArryReq();
            break;
        }

    }

}
  • 0
    попробовал это тоже .. не сработало
  • 0
    Похоже, вы выполняете запрос GET и кодируете свои параметры в JSON. Я не понимаю, как это может закончиться тем, что вы можете получить непосредственно из $_POST . Вы уверены, что правильно следуете учебнику?
Показать ещё 2 комментария
Теги:
android-volley

3 ответа

0

Если ваша проблема не была исправлена, попробуйте мой следующий код:

Map<String, String> stringMap = new HashMap<>();
stringMap.put("key1", "value1");
stringMap.put("key2", "value2");        
final String requestBody = buildRequestBody(stringMap);

...

public String buildRequestBody(Object content) {
    String output = null;
    if ((content instanceof String) ||
            (content instanceof JSONObject) ||
            (content instanceof JSONArray)) {
        output = content.toString();
    } else if (content instanceof Map) {
        Uri.Builder builder = new Uri.Builder();
        HashMap hashMap = (HashMap) content;
        if (hashMap != null) {
            Iterator entries = hashMap.entrySet().iterator();
            while (entries.hasNext()) {
                Map.Entry entry = (Map.Entry) entries.next();
                builder.appendQueryParameter(entry.getKey().toString(), entry.getValue().toString());
                entries.remove(); // avoids a ConcurrentModificationException
            }
            output = builder.build().getEncodedQuery();
        }
    }

    return output;
}

Внутри вашего запроса POST отмените следующие два метода:

@Override
public String getBodyContentType() {
    return "application/json; charset=utf-8";
}

@Override
public byte[] getBody() throws AuthFailureError {
    try {
        return requestBody == null ? null : requestBody.getBytes("utf-8");
    } catch (UnsupportedEncodingException uee) {
        VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s",
                requestBody, "utf-8");
        return null;
    }
}
0

У меня такая же проблема. "getParams" не будет работать. Предположим, вы хотите опубликовать объект пользователя на сервере. Сначала вы создаете пользовательский объект json, после чего вы публикуете его следующим образом:

        JSONObject jsonBody = new JSONObject();
    try {
        jsonBody.put("Email", email);
        jsonBody.put("Username", name1);
        jsonBody.put("Password", password);
        jsonBody.put("ConfirmPassword", password);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    JsonObjectRequest strReq = new JsonObjectRequest(Request.Method.POST,
            AppConfig.URL_REGISTER, jsonBody, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject jObj) {
            // do these if it request was successful
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            // do these if it request has errors
        }
    }) {

        @Override
        public String getBodyContentType() {
            return "application/json";
        }
    };
  • 0
    Я попробовал это, и был очень уверен, что это будет работать, но все так же.
0

1) Метод Http должен быть POST не Method.GET 2) Изменить:

 @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("dates", "19-08-2015");
                params.put("organizationname", "xyx123");

                return params;
            }

чтобы:

 @Override
    public byte[] getBody() throws AuthFailureError {

        byte[] body = new byte[0];

        try {
            body = mJson.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            Logcat.e(TAG, "Unable to gets bytes from JSON", e.fillInStackTrace());
        }
        return body;
    }

mJson - ваш JSON (String)

  • 0
    я не понимаю тебя .. как я буду добавлять параметры?
  • 0
    Строка JSON: `{" даты ":" 19-08-2015 "," название организации ":" xyx123 "}` Читать о JSON.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню