Android 从web服务url获取json数组
我想从我的PrestashopWeb服务中获取一些json对象或子数组。我可以通过带有AppKey的url在浏览器中获取json。但此请求在android请求中不起作用。my son对象为null,因为http请求无法接收它我的问题是如何在android中通过请求获得此son,浏览器可以成功获得它。 这是我在浏览器中的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中
{"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());
}
}
}