Залп: Как извлечь JSONObject из ответа строки? Является ли это возможным?

Я провел несколько дней, пытаясь выяснить залп & наконец-то удалось выяснить способы использования Method.POST. Я использую StringRequest для передачи параметра email_address в мой PHP. Теперь он возвращает строку JSON:

    {"user_id":1,"email_address":"adminuser"}

Однако я не смог извлечь данные с помощью обычного метода getString (). Это дает мне ошибку «нет значения». Вот мой код Просто выдержка из этого:

    // Login button
btnLogin = (Button) findViewById(R.id.btnLogin);// Login button click event
btnLogin.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
String param = txtUsername.getText().toString();
postData(param);
}
});

}

/**
* Posting parameter
* */
private void postData(final String param) {

// Get username, password from EditText
String username = txtUsername.getText().toString();
String password = txtPassword.getText().toString();

// Check if username, password is filled
if(username.trim().length() > 0 && password.trim().length() > 0){
if(username.equals("adminuser") && password.equals("test")){
RequestQueue rq = Volley.newRequestQueue(this);

StringRequest postReq = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {

@Override
public void onResponse(String response) {
Log.d(TAG, response.toString());

try {

JSONObject person = new JSONObject();
String name = person.getString("user_id");
String email = person.getString("email_address");

//Store session
session.createLoginSession(name, email);

// Staring MainActivity
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
//}

} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}

}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();}

})  {

@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("email_address", param);
return params;
}};

rq.add(postReq);

}
}

}

У меня такое ощущение, что ответ возвращается как String (я могу ошибаться). Но я пытался использовать пользовательский запрос, gson, но что бы я ни делал, используя метод post, не работает. StringRequest — единственный метод, который на самом деле что-то возвращает, но сейчас я не могу извлечь данные из него. Я хочу хранить данные в сессии.

Было бы здорово, если бы кто-нибудь мог помочь, как я гуглил & пробовал любые решения, которые мог найти, но безрезультатно. Спасибо!

3

Решение

            @Override
public void onResponse(String response) {
Log.d(TAG, response.toString());

try {
//Do it with this it will work
JSONObject person = new JSONObject(response);
String name = person.getString("user_id");
String email = person.getString("email_address");

//Store session
session.createLoginSession(name, email);

// Staring MainActivity
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
//}

} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}

}
8

Другие решения

Других решений пока нет …