0

以下のコードを使用して、サーバーからjsonファイルをダウンロードしようとしています。しかし、私のアプリは奇妙な動作をします。json が 1 ~ 2 秒でダウンロードされることもあれば、この関数で永遠に動かなくなることもあります。また、HttpUrlConnection などの別のダウンロード方法も試しました。ただし、それも役に立ちません。誰でも私に修正を提案できますか!!

public String getJSONString(String url) {
        String json = null;
        HttpClient httpclient = null;
        try {
            Log.d("MARKER","PARSING SE PEHLE");
            HttpParams params = new BasicHttpParams();
            Log.d("MARKER","1st line");
            HttpClient httpclient = new DefaultHttpClient(params);              HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpclient.execute(httpPost);

            HttpEntity httpEntity = httpResponse.getEntity();    
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 80000);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) 
            {sb.append(line + "\n");}
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
        Log.d("MARKER","DOWNLOAD COMPLETE");
        HttpClientProvider.safeClose(httpclient);
        return json;

    }
4

1 に答える 1

0

これを試して:

public class JSONParser {

   static InputStream is = null;
   static JSONObject jObj = null;
   static String json = "";

   // constructor
   public JSONParser() {

   }

   // function get json from url
   // by making HTTP POST or GET method
   public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {

      // Making HTTP request
      try {

         // check for request method
         if (method == "POST") {
            // request method is POST
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

         } else if (method == "GET") {
            // request method is GET
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
         }

      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      } catch (ClientProtocolException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }

      if (is == null)
         return new JSONObject();

      try {
         BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
         StringBuilder sb = new StringBuilder();
         String line = null;
         while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
         }
         is.close();
         json = sb.toString();
      } catch (Exception e) {
         Log.e("Buffer Error", "Error converting result " + e.toString());
      }

      // try parse the string to a JSON object
      try {
         jObj = new JSONObject(json);
      } catch (JSONException e) {
         Log.e("JSON Parser", "Error parsing data " + e.toString());
      }

      // return JSON String
      return jObj;

   }
}

別の問題を回避するために、AsyncTask に関連オブジェクトを設定することができます。楽しむ

String SERVER_URL ="";


List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jsonParser.makeHttpRequest(SERVER_URL, "GET", params);
于 2012-10-25T08:07:17.020 に答える