Я не могу получить логическое значение, отправленное с остальных Java-файлов в мое приложение для Android в виде JSONObject - PullRequest
0 голосов
/ 03 января 2019

Что ж, я получаю ошибку Validation:com.android.volley.ParseError: org.json.JSONException:value false of type java.jang.Boolean cannot be converted to JSONObject всякий раз, когда пытаюсь получить логическое значение, отправленное веб-службой REST, в моем приложении для Android с использованием формата volley JSONObjectRequest.

Я знаю, что использование StringRequest будет простым способом решения этой проблемы, но мне действительно интересно, есть ли другой способ решить эту проблему. Я предполагаю, что проблема заключается в примитивном логическом значении, потому что оно не эквивалентно объекту json. таким образом, исключение выдается методом onResponse(JSONObject response) залпа.

вот веб-сервис REST Java:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Boolean validate(CreditCard card) {
            //instructions
    if(/* some conditions */) {
        cardList.put(card.getId(), card);
        return true;
    }
    return false;
}

и код приложения для Android:

public class MainActivity extends Activity implements View.OnClickListener {

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

        et_id = findViewById(R.id.id);
        et_num = findViewById(R.id.number);
        et_type = findViewById(R.id.type);
        et_ctrlnb = findViewById(R.id.ctrlnum);
        et_expd = findViewById(R.id.expdate);
        b_validate = findViewById(R.id.validate);

        b_validate.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        if (v == b_validate) {
            String request_url = "http://192.168.191.1:8080/RESTCardValidator/rest/cardvalidator";

            JSONObject cardDetails = new JSONObject();
            try {
                cardDetails.put("controlNumber", Integer.parseInt(et_ctrlnb.getText().toString()));
                cardDetails.put("expiryDate", et_expd.getText().toString());
                cardDetails.put("id", Long.parseLong(et_id.getText().toString()));
                cardDetails.put("number", et_num.getText().toString());
                cardDetails.put("type", et_type.getText().toString());
            } catch (JSONException e) {
                e.printStackTrace();
            }

            JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, request_url, cardDetails,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            Toast.makeText(MainActivity.this, "Validation:" + response.toString(), Toast.LENGTH_LONG).show();
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(MainActivity.this, "Validation:" + error.toString(), Toast.LENGTH_LONG).show();

                }
            });
            Volley.newRequestQueue(this).add(request);
    }
}

как вы видите на изображении, получено значение true / false

Первый скриншот-

enter image description here

Второй снимок экрана -

enter image description here

...