Получить POST Результат в формате JSON - PullRequest
0 голосов
/ 20 сентября 2018

Я отправляю данные с помощью POST.Я получаю ответ с JSON.Если я использую простой текст вместо JSON, он работает, но не работает с JSON.

Я не получаю никакого экрана ошибки в приложении

if (status) = true ->Зарегистрироваться OK

ИМПОРТ:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

import javax.xml.transform.Result;

JSON:

[{"status":true,"result":"registerSuccessful","message":"Register succeeded"}]

Код JAVA:

private void registernewuser() {
        StringRequest request = new StringRequest(Request.Method.POST, registerUrl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                try {

                    JSONObject jsonResponse = new JSONObject(response);
                    String RegisterResultString = jsonResponse.getString("status");

                    if (RegisterResultString.equals("true")) {
                        Toast.makeText(getApplicationContext(), "Successfully Registered User", Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
                        startActivity(intent);
                    } else {
                        Toast.makeText(getApplicationContext(), "Sorry, Error Registering New User", Toast.LENGTH_LONG).show();
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("registeruser", "true");
                params.put("username", username.getText().toString().trim());
                params.put("userpassword", userpassword.getText().toString().trim());
                params.put("useremail", useremail.getText().toString());
                return params;
            }
        };
        Volley.newRequestQueue(this).add(request);
    }

У меня нет проблем при создании приложений,Но я не могу найти свою ошибку.

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Ваш код JSON - это JSONArray с одним JSONObject из-за квадратных скобок.Итак, просто установите тип вашего jsonResponse как JSONArray и получите JSONObject, используя метод JSONArray.getJSONObject(0).

JSONArray jsonResponse = new JSONArray(response);
String registerResultString = jsonResponse.getJSONObject(0).getString("status");
0 голосов
/ 20 сентября 2018

Вы можете вызвать запрос как JSONRequest

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
                your_url, new com.android.volley.Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                    }
                }, new com.android.volley.Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }) {
            @Override
            public String getBodyContentType() {
                return "application/json; charset=utf-8";
            }
        };
0 голосов
/ 20 сентября 2018

Вам необходимо добавить заголовок к вашему запросу, чтобы указать использование JSON:

request.addHeader("content-type", "application/json");

В противном случае он будет интерпретироваться как обычный текст.

...