使用Android Volley库和API

使用Android Volley库和API,android,json,api,android-volley,jsonobject,Android,Json,Api,Android Volley,Jsonobject,我是Android截击库的新手。我向API发送用户名和密码,API返回用户详细信息。这是我在android中的登录用户方法 public void LoginUser(){ // Tag used to cancel the request String tag_json_obj = "json_obj_req"; String url = "http://example.com/myfile/mobile_api/"; //final ProgressDi

我是Android截击库的新手。我向API发送用户名和密码,API返回用户详细信息。这是我在android中的登录用户方法

public void LoginUser(){

    // Tag used to cancel the request
    String tag_json_obj = "json_obj_req";

    String url = "http://example.com/myfile/mobile_api/";

    //final ProgressDialog pDialog = ProgressDialog.show(getParent(), "Please wait", "Login user");


            JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
                    url, null,
                    new Response.Listener<JSONObject>() {

                        @Override
                        public void onResponse(JSONObject response) {
                            try {
                                if(response.getString(KEY_SUCCESS)!=null){

                                    String res = response.getString(KEY_SUCCESS);

                                    if(Integer.parseInt(res) == 1){
                                       JSONObject json_user = response.getJSONObject("user");
                                       Toast.makeText(getApplicationContext(), "User Logged in.. " + json_user.getString("name"), Toast.LENGTH_LONG).show();
                                    }
                                }
                                else if(response.getString(KEY_ERROR)!=null){

                                    String res = response.getString(KEY_ERROR);

                                    if(Integer.parseInt(res) == 1){
                                        Toast.makeText(getApplicationContext(), response.getString("error_msg"), Toast.LENGTH_LONG).show();
                                    }
                                }

                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                                //pDialog.hide();
                            }
                            Log.d(TAG, response.toString());
                            //pDialog.hide();
                        }
                    }, new Response.ErrorListener() {

                        @Override
                        public void onErrorResponse(VolleyError error) {
                            VolleyLog.d(TAG, "Error: " + error.getMessage());
                            Log.d(TAG, "Error: " + error.getMessage());
                            //pDialog.hide();
                        }
                    }) {

                @Override
                protected Map<String, String> getParams() {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("tag", login_tag);
                    params.put("email", Email);
                    params.put("password", Pass);

                    return params;
                }

            };

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
}
但我从Json中得到以下错误

07-31 16:58:27.307:E/JSON解析器(7506):解析数据org.JSON.JSONException时出错:java.lang.String类型的值No无法转换为JSONObject


那么,这是使用截击连接移动API和Android应用程序的正确方法吗?或者有人能解释一下原因吗

嗯,我想我已经找到了问题所在。我得到这个错误消息是因为它返回一个字符串“Access Denied”,如果标记不正确,它会给出“Access Denied”消息。所以这不是一个json对象,它只是一个字符串。要解决此错误,可以使用字符串请求获取字符串值

StringRequest strReq = new StringRequest(Method.POST, //here change the method to POST
            Const.URL_STRING_REQ, new Response.Listener<String>() {

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

                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    hideProgressDialog();
                }


            }){

        @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("tag", login_tag);
                params.put("email", Email);
                params.put("password", Pass);

                return params;
            }
    };
StringRequest strReq=new-StringRequest(Method.POST,//此处将方法更改为POST
Const.URL\u STRING\u REQ,新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
Log.d(TAG,response.toString());
msgressponse.setText(response.toString());
hideProgressDialog();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(标记“Error:+Error.getMessage());
hideProgressDialog();
}
}){
@凌驾
受保护的映射getParams(){
Map params=新的HashMap();
参数put(“标签”,登录标签);
参数put(“电子邮件”,电子邮件);
参数put(“密码”,Pass);
返回参数;
}
};

也发布您的json响应。实际上我没有收到任何响应。这就是问题所在。我收到了上面的错误消息。错误:org.json.JSONException:java.lang.String类型的值访问无法转换为JSONWell,我想我已经发现了问题。我得到这个错误消息是因为它返回一个字符串“Access Denied”,如果标记不正确,它会给出“Access Denied”消息。
StringRequest strReq = new StringRequest(Method.POST, //here change the method to POST
            Const.URL_STRING_REQ, new Response.Listener<String>() {

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

                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    hideProgressDialog();
                }


            }){

        @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("tag", login_tag);
                params.put("email", Email);
                params.put("password", Pass);

                return params;
            }
    };