Android 从web服务url获取json数组

Android 从web服务url获取json数组,android,json,web-services,url,prestashop-1.6,Android,Json,Web Services,Url,Prestashop 1.6,我想从我的PrestashopWeb服务中获取一些json对象或子数组。我可以通过带有AppKey的url在浏览器中获取json。但此请求在android请求中不起作用。my son对象为null,因为http请求无法接收它我的问题是如何在android中通过请求获得此son,浏览器可以成功获得它。 这是我在浏览器中的json响应: {"products":[{"id":107},{"id":120},{"id":767},{"id":26},{"id":27}]} 但我无法在android中

我想从我的PrestashopWeb服务中获取一些json对象或子数组。我可以通过带有AppKey的url在浏览器中获取json。但此请求在android请求中不起作用。my son对象为null,因为http请求无法接收它我的问题是如何在android中通过请求获得此son,浏览器可以成功获得它。

这是我在浏览器中的json响应:

{"products":[{"id":107},{"id":120},{"id":767},{"id":26},{"id":27}]}
但我无法在android中获取此json,或者我的请求可能是错误的:

public class Asyncs {
JSONParser jParser = new JSONParser();
JSONArray jsonArrays = new JSONArray();

 public class GetProduct extends AsyncTask<String, String, ArrayList<String>> {

    ArrayList<String> test = new ArrayList<>();
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    protected ArrayList<String> doInBackground(
            String... args) {
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        JSONObject json = jParser.makeHttpRequest("http://MyApp-Key@elsevan.com/api/products", "GET", params);
        Log.d(" Products: >>>>>>>>>> ", json.toString());
        try {
            for (int i = 0; i < jsonArrays.length(); i++) {
                JSONObject c = jsonArrays.getJSONObject(i);
            }

        } catch (JSONException e) {
                e.printStackTrace();
        }
        return test;
    }
    @Override
    protected void onPostExecute(final ArrayList<String> result) {

    }
}
}

你永远不会得到一个json数组,你的“json”应该是一个数组。如果您得到json响应(“产品”是json数组),则必须执行以下操作:

    JSONObject json = jParser.makeHttpRequest("http://MyApp-Key@elsevan.com/api/products", "GET", params);

    JSONArray json_products = json.getJSONArray("products");

    for(int i = 0; i < json_products.length(); i++ {

        JSONObject c = json_products.getJSONObject(i);

        Log.e("Object ID:", c.getString("id");
    }
JSONObject json=jParser.makeHttpRequest(“http://MyApp-Key@elsevan.com/api/products,“GET”,params);
JSONArray json_products=json.getJSONArray(“产品”);
对于(int i=0;i
另外,您是否检查了实际的json?您是否得到了准确的响应?doInBackground上的null指针这是因为您调用的jsonArray完全为null。

JSONObject json=jParser.makeHttpRequest(“http://MyApp-Key@elsevan.com/api/products,“GET”,params);
JSONObject json = jParser.makeHttpRequest("http://MyApp-Key@elsevan.com/api/products", "GET", params);

JSONArray array = json.get("products"); 

for(int i = 0; i < jsonArray.length(); i++ {
     JSONObject c = jsonArrays.getJSONObject(i);
}
JSONArray数组=json.get(“产品”); 对于(int i=0;i
我解决了我的问题。它是http客户端授权:

client.setBasicAuth("MyApp-Key", "");
        client.get("http://elsevan.com/api/products/107", new JsonHttpResponseHandler(){

            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                super.onSuccess(statusCode, headers, response);
                Toast.makeText(getActivity(), "Success!", Toast.LENGTH_LONG).show();


                Log.d("android OK", response.toString());
            }
}
}

可能重复的不是真正的答案或什么,但你可以尝试从服务器获取json的改装库。我的问题是通过请求获取son。你尝试使用了吗?这是一个非常好的异步,在一个简单的步骤中包含所有的获取、发布、放置和删除请求。我使用了它,非常好。但是它运行在失败方法上。因为它不能执行http r请求正确。我的请求错误响应为:B@53790420loopj响应使用字节…您需要将响应从字节“解析”为字符串。如下所示:String str=new String(字节,“UTF-8”);并检查API是否正常工作。不!它不工作!它再次需要用户名。在浏览器中,此链接需要用户通过!我的答案成功。你救了我的命!
client.setBasicAuth("MyApp-Key", "");
        client.get("http://elsevan.com/api/products/107", new JsonHttpResponseHandler(){

            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                super.onSuccess(statusCode, headers, response);
                Toast.makeText(getActivity(), "Success!", Toast.LENGTH_LONG).show();


                Log.d("android OK", response.toString());
            }
}
}