我是JSON解析异步任务,当我使用URL http://example.com/json/note.json时它正在工作(使用免费的JSON托管服务,我保存后无法编辑)。但我的文件并未永久放在一个链接上。所以我使用URL重定向服务重定向新的JSON URL。当我使用网址重定向服务时,我的网址不会重定向到http://example.com/json/new_note.json。
new JSONAsyncTask().execute("http://example.com/json/note.json"); //works
new JSONAsyncTask().execute("http://example.com/redirection_service_url"); //doesn't works
JSONAsyncTask
class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... urls) {
arraylist = new ArrayList<HashMap<String, String>>();
try {
//------------------>>
HttpGet httppost = new HttpGet(urls[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
StatusLine stat = response.getStatusLine();
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray("array");
for (int i = 0; i < jarray.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
jsono = jarray.getJSONObject(i);
// Retrive JSON Objects
// Set the JSON Objects into the array
arraylist.add(map);
}
return true;
} else {
Log.e("Error", "Something went wrong");
}
//------------------>>
} catch (ParseException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
protected void onPostExecute(Boolean result) {
if (result == false) {
Toast.makeText(getApplicationContext(), "Unable to Fetch data from server", Toast.LENGTH_LONG).show();
}
}
}
在浏览器中使用我的URL重定向服务URL显示我的JSON数据,我确保它没有错误。
请帮忙!
答案 0 :(得分:0)
根据我的经验,即使方法是GET,Android也不支持重定向HTTP连接。
您应该获取HTTP响应并提取Location标头,然后再发出JSON有效负载请求。