2016-05-05 17 views
0

私はJSONで非同期タスクを解析しましたが、URL http://example.com/json/note.jsonを使用しています(無料のJSONホスティングサービスを使用して保存した後は編集できません)。しかし、私のファイルは1つのリンクに永久に置かれません。そこで、URLリダイレクトサービスを使用して新しいJSON URLをリダイレクトしました。 URLリダイレクトサービスを使用すると、URLはhttp://example.com/json/new_note.jsonにリダイレクトされません。ブラウザで私のリダイレクトサービスのURLを使用してJSON urlリダイレクトに失敗しました

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(); 
      } 

     } 
    } 

私のJSONデータを示して、私はそれにエラーがない確実にしました。

助けてください!

+0

JSONAsyncTaskコードを公開してください。 – MarkySmarky

+0

AsyncTaskクラスが追加されました。 – Sathish

答えて

0

私の経験では、メソッドがGETの場合でも、AndroidはHTTP接続のリダイレクトをサポートしていません。

HTTPレスポンスを取得してLocationヘッダーを抽出し、JSONペイロードをもう一度リクエストする必要があります。

関連する問題