为android json设置httprequest超时

时间:2014-12-24 15:10:12

标签: php android json httprequest connection-timeout

这是我的代码到目前为止,我根据我在stackoverflow上找到的很多帖子进行了更改,但是我似乎无法使其正常工作,它运行正常,但有时它会停留在进度上吧,它一直在旋转,直到应用程序崩溃,我试图设置超时,以便如果连接不成功,它将停止而不是让应用程序崩溃。

我不确定我是否正确使用HttpConnectionParams.setSoTimeout和HttpConnectionParams.setConnectionTimeout,

这是JSON代码

public JSONObject makeHttpRequest(String url, String method,List<NameValuePair> params) 
    {
        try 
        {
             HttpParams httpParameters = new BasicHttpParams();
             HttpConnectionParams.setSoTimeout(httpParameters, 4000);
             HttpConnectionParams.setConnectionTimeout(httpParameters, 4000);

            if(method.equals("POST"))
            {
                HttpClient  httpClient = new DefaultHttpClient(httpParameters);
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params,"utf-8"));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                if (httpEntity != null)
                {
                     is = httpEntity.getContent();
                     if(is != null)
                     {
                         BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
                         StringBuilder sb = new StringBuilder();
                         String line = null;
                         while ((line = reader.readLine()) != null) 
                         {
                             sb.append(line + "\n");
                         }
                         is.close();
                         json = sb.toString();
                         jObj = new JSONObject(json);
                     }
                }
            }
            else if(method.equals("GET"))
            {
                HttpClient 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();
                if (httpEntity != null)
                {
                     is = httpEntity.getContent();
                     if(is != null)
                     {
                         BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
                         StringBuilder sb = new StringBuilder();
                         String line = null;
                         while ((line = reader.readLine()) != null) 
                         {
                             sb.append(line + "\n");
                         }
                         is.close();
                         json = sb.toString();
                         jObj = new JSONObject(json);
                     }
                }
            }           
        } 
        catch (ConnectTimeoutException e) 
        {
            //Here Connection TimeOut excepion    
            Log.e("connection error time OUT", "ok");
         }
        catch (UnsupportedEncodingException e) 
        {
            e.printStackTrace();
        } catch (ClientProtocolException e) 
        {
            e.printStackTrace();
        } catch (IOException e) 
        {
            e.printStackTrace();
        }
        catch (Exception e) 
        {
            Log.e("Buffer Error", "error converting result " + e.toString());
        }
        return jObj;

    }

这是AsyncTask从php页面加载项目。

class GetSpecialOffers extends AsyncTask<String, String, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(getActivity());
            pDialog.setMessage("loading items, please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... args) {

            List<NameValuePair> params = new ArrayList<NameValuePair>();

            try 
            {
                int success=0;
                JSONObject json = jParser.makeHttpRequest(url_items, "GET",params);
                if(json != null)
                {
                    success = json.getInt(TAG_SUCCESS);
                }
                if (success == 1) 
                {
                    successValue = 1;
                    items = json.getJSONArray(TAG_SPECIAL_ITEM);

                    for (int i = 0; i < items.length(); i++) 
                    {
                        JSONObject c = items.getJSONObject(i);

                        specialid = c.getString(TAG_SPECIAL_ID);
                        specialname = c.getString(TAG_SPECIAL_NAME);
                        specialprice = c.getString(TAG_SPECIAL_PRICE);
                        specialimage = c.getString(TAG_SPECIAL_IMAGE);
                        specialdate = c.getString(TAG_SPECIAL_DATE);

                        HashMap<String, String> map = new HashMap<String, String>();

                        map.put(TAG_SPECIAL_ID, specialid);
                        map.put(TAG_SPECIAL_NAME, specialname);
                        map.put(TAG_SPECIAL_PRICE, specialprice);
                        map.put(TAG_SPECIAL_IMAGE, specialimage);
                        map.put(TAG_SPECIAL_DATE, specialdate);

                        SpecialList.add(map);
                    }
                } 
                else 
                {
                    successValue = 0;
                }
            } 
            catch (JSONException e) 
            {
                e.printStackTrace();
            }
            return null;
        }

        protected void onPostExecute(String file_url) 
        {
            pDialog.cancel();
            if (successValue==1)
            {
                adapter = new SpecialAdapter(getActivity(), SpecialList);
                lVSpecial.setAdapter(adapter);
            }
            else
            {
                NoSpecialOffersFound();
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

使用此代码,这对我有用。

<强> JSONParser.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

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

        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;

    }
}