Php 截击:如何从字符串响应中提取JSONObject?可能吗?
我花了几天的时间试图找出截击的方法&最终找到了使用该方法的方法。我使用StringRequest将email_address参数传递给我的PHP。现在它返回一个JSON字符串:Php 截击:如何从字符串响应中提取JSONObject?可能吗?,php,android,json,android-volley,Php,Android,Json,Android Volley,我花了几天的时间试图找出截击的方法&最终找到了使用该方法的方法。我使用StringRequest将email_address参数传递给我的PHP。现在它返回一个JSON字符串: {"user_id":1,"email_address":"adminuser"} 但是,我无法使用普通的getString()方法提取数据。这给了我“没有价值”的错误。这是我的密码。只是其中的一个摘录: // Login button btnLogin = (Button) findViewB
{"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);
}
}
}
//登录按钮
btnLogin=(按钮)findViewById(R.id.btnLogin);
//登录按钮点击事件
btnLogin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串参数=txtUsername.getText().toString();
postData(param);
}
});
}
/**
*过帐参数
* */
私有void postData(最终字符串参数){
//从EditText获取用户名、密码
字符串username=txtUsername.getText().toString();
字符串密码=txtPassword.getText().toString();
//检查用户名、密码是否已填写
if(username.trim().length()>0&&password.trim().length()>0){
if(username.equals(“adminuser”)&password.equals(“test”)){
RequestQueue rq=Volley.newRequestQueue(this);
StringRequest postReq=新的StringRequest(Request.Method.POST,url,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Log.d(TAG,response.toString());
试一试{
JSONObject person=新的JSONObject();
字符串名称=person.getString(“用户id”);
String email=person.getString(“电子邮件地址”);
//存储会话
会话。createLoginSession(名称、电子邮件);
//凝视主活动
Intent Intent=新的Intent(getApplicationContext(),MainActivity.class);
星触觉(意向);
完成();
//}
}捕获(JSONException e){
e、 printStackTrace();
Toast.makeText(getApplicationContext(),“错误:+e.getMessage(),Toast.LENGTH_LONG).show();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(标记“Error:+Error.getMessage());
Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG.show();
}
}) {
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“电子邮件地址”,参数);
返回参数;
}
};
rq.add(postReq);
}
}
}
我有一种感觉,这是因为响应以字符串形式返回(我可能错了)。但我尝试过使用自定义请求,gson,但无论我使用post方法做什么都不起作用。StringRequest是唯一实际返回某些内容的方法,但现在,我无法从中提取数据。我想在会话中存储数据
如果有人能像我一样帮助我,那就太好了&我尝试了我能找到的任何解决方案,但都没有用。谢谢
@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();
}
}