Я хочу добавить объект json, который вложен в базу данных с помощью volley. Я не могу добавить это

#android #json #android-volley

#Android #json #android-volley

Вопрос:

Это тип вложенного объекта, который я хочу добавить: { «user_id»: 434, «FirstName»: «Harry», «LastName»: «Dex», «userName»: «PN1002», «password»: «Reset123», «role»: { «RoleName»:»Пользователь» } }

Это мой основной файл:

 EditText firstName, lastName, userName, passWord;
Spinner roleName;
Button submit;
String rolename;
String fName, lName, uName, pass, rName;
RequestQueue requestQueue;
static final String REQ_TAG = "VACTIVITY";



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

    submit = (Button) findViewById(R.id.btn_submit);
    firstName = findViewById(R.id.et_fstName);
    lastName =  findViewById(R.id.et_lstName);
    userName =  findViewById(R.id.et_userName);
    passWord = findViewById(R.id.et_passWord);

    roleName = (Spinner) findViewById(R.id.et_roleName);
    ArrayList<String> arrayList = new ArrayList<>();
    arrayList.add("User");
    arrayList.add("Engineer");
    arrayList.add("Team Manager");
    arrayList.add("Worker");
    arrayList.add("Developer");
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arrayList);
    arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    roleName.setAdapter(arrayAdapter);

    roleName.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            rolename = adapterView.getItemAtPosition(i).toString();
           // Toast.makeText(adapterView.getContext(), "Selected: "   rolename, Toast.LENGTH_LONG).show();

        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

    requestQueue = RequestQueueSingleton.getInstance(this.getApplicationContext())
            .getRequestQueue();

    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            fName = firstName.getText().toString();
            lName = lastName.getText().toString();
            uName = userName.getText().toString();
            pass = passWord.getText().toString();
            rName = rolename;

            addUserdata();
        }
    });

}

protected void onStop() {
    super.onStop();
    if (requestQueue != null) {
        requestQueue.cancelAll(REQ_TAG);
    }
}

public void addUserdata() {

    JSONObject json = new JSONObject();
    JSONObject jsonObject = new JSONObject();
    try {

        json.put("roleName", rName);


    } catch (JSONException e) {
        e.printStackTrace();
    }

    try {
        jsonObject.put("role", json);
        jsonObject.put("firstName",fName);
        jsonObject.put("lastName",lName);
        jsonObject.put("userName",uName);
        jsonObject.put("password",pass);
    } catch (JSONException e) {
        e.printStackTrace();
    }


    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, EndPoint.ADD_USER,jsonObject,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        Toasty.success(AddNewUserActivity.this,"Saved successfully!" response.get("message").toString(),Toasty.LENGTH_LONG).show();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(AddNewUserActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
    jsonObjectRequest.setTag(REQ_TAG);
    requestQueue.add(jsonObjectRequest);



}
  

Я получаю предупреждение как:

W / System.err: org.json.JSONException: нет значения для сообщения в org.json.JSONObject.get(JSONObject.java:392) в com.project.project1.myapplication2.Действия.AddNewUserActivity $ 3.onResponse(AddNewUserActivity.java:143) в com.project.project1.myapplication2.Действия.AddNewUserActivity $ 3.onResponse(AddNewUserActivity.java:139) W / System.err: в com.android.volley.toolbox.JSONRequest .deliverResponse(JSONRequest.java:83) в com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java: 106) на android.os.Handler.handleCallback(Handler.java:873) на android.os.Handler.DispatchMessage(Handler.java: 99) на android.os.Looper.loop(Looper.java: 214) на android.app.ActivityThread.main(ActivityThread.java:7078) в java.lang.reflect.Method.invoke(собственный метод) с System.err: в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:974)

Ответ №1:

ваш rolename null , пока вы не выберете его из spinner , что означает, что ваш rName также null изначально выдает ошибку. попробуйте установить для него некоторое значение, прежде чем даже щелкнуть spinner

Комментарии:

1. тогда в вашем ответе json нет message ключа, который вы пытаетесь получить. проверьте, что ваш сервер действительно отправляет обратно. вы можете использовать такие инструменты, как postman