#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