android Async和http客户端

时间:2013-02-04 05:55:15

标签: android android-asynctask

我的Android应用程序中有一个自定义的http类来处理发送到服务器的http post数据。但是,我需要将其转换为扩展asyncTask,因为我需要1,在获取数据时显示进度动画,2,同时刷新/更新ui。

那么最简单的方法是什么呢。请注意,我已经在整个应用程序中使用该类来处理httpPOST请求。

这是班级:

public class Adapter_Custom_Http_Client 
{  

    //<editor-fold defaultstate="collapsed" desc="Class Members">

public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds  

private static HttpClient mHttpClient;  

//</editor-fold>

        //<editor-fold defaultstate="collapsed" desc="getHttpClient">

private static HttpClient getHttpClient()
{  
    if(mHttpClient == null)
    {  
        mHttpClient = new DefaultHttpClient();  
        final HttpParams params = mHttpClient.getParams();  
        HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);  
        HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);  
        ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);  
    }  
return mHttpClient;  
}
//</editor-fold>

        //<editor-fold defaultstate="collapsed" desc="executeHttpPost">

public static String executeHttpPost(String url, ArrayList postParameters) throws Exception
{  
    BufferedReader in = null;

    try
    {  
        HttpClient client = getHttpClient();  
        HttpPost request = new HttpPost(url);  
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);  
        request.setEntity(formEntity);  
        HttpResponse response = client.execute(request);  
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));  
        StringBuffer sb = new StringBuffer("");  
        String line = "";  
        String NL = System.getProperty("line.separator");  
        while ((line = in.readLine()) != null)
        {  
            sb.append(line + NL);  
        }  
        in.close();  
        String result = sb.toString();  
        return result;  
    }
finally
    {  
        if (in != null)
        {  
            try
            {  
                in.close();  
            } catch (IOException e)
            {  
                e.printStackTrace();  
            }
        }
    }
}
//</editor-fold>

        //<editor-fold defaultstate="collapsed" desc="executeHttpGet">

public static String executeHttpGet(String url) throws Exception
{  
BufferedReader in = null;  
    try
    {  
        HttpClient client = getHttpClient();  
        HttpGet request = new HttpGet();  
        request.setURI(new URI(url));  
        HttpResponse response = client.execute(request);  
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));  
        StringBuffer sb = new StringBuffer("");  
        String line = "";  
        String NL = System.getProperty("line.separator");  
        while ((line = in.readLine()) != null)
        {  
            sb.append(line + NL);  
        }  
        in.close();  
        String result = sb.toString();  
        return result;  
    }
    finally
    {  
        if (in != null)
        {  
            try
            {  
                in.close();  
            } 
        catch (IOException e)
            {  
                e.printStackTrace();  
            }
        }
    }
}
//</editor-fold>

}  

3 个答案:

答案 0 :(得分:0)

像这样:

 public class postmethod extends AsyncTask<Void, Void, Void> {

 //declarations what u required
 @Override
 protected void onPreExecute() {          
 super.onPreExecute();
 }

 @Override
 protected Void doInBackground(Void... params) {

 //do ur work here completly that will runs as background
 }

 @Override
 protected void onPostExecute(Void result) {       
 super.onPostExecute(result);
 } 
 }

答案 1 :(得分:0)

使用此异步类:

         public class Albums extends AsyncTask<Void, Void, Void> {

         //declarations what u required

        @Override
          protected void onPreExecute() {          
           super.onPreExecute();
          ///declare ur progress view and show it

          }

        @Override
        protected Void doInBackground(Void... params) {

        //do ur http work here which is to be done in background
        }

        @Override
        protected void onPostExecute(Void result) {       
        super.onPostExecute(result);

        //Update ur UI here...

        } 


       }

有任何问题请问..

编辑:

     Albums alb=new Albums();
       alb.execute(null);///u can use different arguments that u need

答案 2 :(得分:0)

在您的活动中创建新的异步内部类:

public class InnerClass extends AsyncTask<Void, Void, String>{

    ProgressDialog dialog;

    @Override
    protected String doInBackground(Void... params) {
        String result = Adapter_Custom_Http_Client.executeHttpPost(url , param); 
        return result;
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }

    @Override
    protected void onPostExecute(String result) {
        dialog.dismiss();
        super.onPostExecute(result);
    }

    @Override
    protected void onPreExecute() {
        dialog = ProgressDialog.show(context, "", "Please wait....");
        super.onPreExecute();
    }
}

使用

执行后台任务

new Inner Class()。execute();