Android 使用截取接收JSON字符串

Android 使用截取接收JSON字符串,android,json,node.js,mongodb,android-volley,Android,Json,Node.js,Mongodb,Android Volley,我的Node.js服务器从MongoDB发送一个包含JSON文档的数组,但我的Android应用程序不会下载它。我使用response.send(placearray);,发送了它但是,如果我发送一个普通字符串,如Request received,它就可以正常工作 我使用了一个POST请求发送器来测试服务器,它可以很好地接收阵列,但Volley不会 我知道我收到的是一个字符串,这可能是造成这种情况的原因,但我不知道该怎么办 以下是我使用的程序: StringRequest PlaceReques

我的Node.js服务器从MongoDB发送一个包含JSON文档的数组,但我的Android应用程序不会下载它。我使用
response.send(placearray);,发送了它
但是,如果我发送一个普通字符串,如
Request received
,它就可以正常工作

我使用了一个POST请求发送器来测试服务器,它可以很好地接收阵列,但Volley不会

我知道我收到的是一个字符串,这可能是造成这种情况的原因,但我不知道该怎么办

以下是我使用的程序:

StringRequest PlaceRequest = new StringRequest(Request.Method.POST, url, new      Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            DisplayHotels(response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    }) {
        protected Map<String, String> getParams() {
            Map<String, String> PlaceMap = new HashMap<>();
            PlaceMap.put("Test", "Test");
            return PlaceMap;
        }
    };
    PlaceQueue.add(PlaceRequest);
StringRequest PlaceRequest=new-StringRequest(Request.Method.POST,url,new-Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
(回应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}) {
受保护的映射getParams(){
Map PlaceMap=newhashmap();
PlaceMap.put(“测试”、“测试”);
返回地点图;
}
};
PlaceQueue.add(PlaceRequest);
正如Fakher所建议的,我只是尝试了一下,但仍然不起作用:

    JsonArrayRequest PlaceArrayRequest = new JsonArrayRequest(Request.Method.POST, url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            ArrayList MArrList = new ArrayList();
            //MArrList.add(response);
            DisplayHotels(response.toString());
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Context context = getApplicationContext();
            Toast VerrorToast = Toast.makeText(context, error.toString(), Toast.LENGTH_LONG);
        }
    }) {
        protected Map<String, String> getParams() {
            Map<String, String> PMap = new HashMap<>();
            PMap.put("Hotels", "All");
            return PMap;
        }
    };
JsonArrayRequest PlaceArrayRequest=newjsonarrayrequest(Request.Method.POST,url,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
ArrayList MArrList=新的ArrayList();
//添加(响应);
DisplayHotels(response.toString());
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Context=getApplicationContext();
Toast VerrorToast=Toast.makeText(上下文,error.toString(),Toast.LENGTH\u LONG);
}
}) {
受保护的映射getParams(){
Map PMap=新的HashMap();
PMap.put(“酒店”、“所有”);
返回PMap;
}
};
它现在接收JSONArray,但不会解析它,这是我尝试的代码:

RequestQueue PlaceQueue=Volley.newRequestQueue(this)

JsonArrayRequest PlaceArrayRequest=newjsonarrayrequest(Request.Method.POST,url,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
int i;
ArrayList MArrList=新的ArrayList();
对于(i=0;i
我得到这个错误:org.json.JSONException:Value{“\u id”:“55f97b849b8385cd03730b09”,“地名”:“W South Beach”,“PlaceType”:“Hotel”,“PlaceAddress”:“2201 Collins Avenue,Miami Beach,Florida,United States.邮编:33139”,“PlaceCity”:“Miami”,“EstimatedPrice”:“2023”,“OtherDetails”:“凉爽的角落套房。\n北极海景。\nVIP设施。\n房间大小:1350平方英尺(125平方米)。\n禁止吸烟。\n”}在108处,java.lang.String类型不能转换为JSONArray


感谢您的时间。

要通过截击获取阵列数据,您必须通过JsonArrayRequest:

JsonArrayRequest newsReq = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {


                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {


            }
        });
        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(newsReq);
JsonArrayRequest newsReq=新的JsonArrayRequest(url,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
});
//将请求添加到请求队列
AppController.getInstance().addToRequestQueue(newsReq);

下面是一个使用截击库的好方法

您正在描述问题,但是如果您也将完整的截击代码放在Q中,它将加快解决方案的速度。(onResponce)只是截击的一部分,您应该重写getBody()而不是getParams()好的,你能在浏览器上运行给出Json结果的url并把结果放进去吗?它必须以[]开头和结尾.好的,你能在你的代码中做一些记录吗?只需记录Json响应,这样我们就可以知道wjere的问题了谢谢。问题已经解决了。我使用了JsonObject类来解析ArrayList中的数据,现在它可以正常工作了。
JsonArrayRequest newsReq = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {


                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {


            }
        });
        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(newsReq);