Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android异步和http客户端_Android_Android Asynctask - Fatal编程技术网

android异步和http客户端

android异步和http客户端,android,android-asynctask,Android,Android Asynctask,我在android应用程序中有一个自定义http类,用于处理发送到服务器的http post数据。但是,我需要将其转换为extend asyncTask,因为我需要1,在获取数据时显示进度动画,2,同时刷新/更新ui 那么最简单的方法是什么呢。请注意,我已经在整个应用程序中使用该类来处理httpPOST请求 下面是课堂: public class Adapter_Custom_Http_Client { //<editor-fold defaultstate="collap

我在android应用程序中有一个自定义http类,用于处理发送到服务器的http post数据。但是,我需要将其转换为extend 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>

}  
公共类适配器\u自定义\u Http\u客户端
{  
//
公共静态最终整数HTTP_超时=30*1000;//毫秒
专用静态HttpClient mHttpClient;
//
//
私有静态HttpClient getHttpClient()
{  
if(mHttpClient==null)
{  
mHttpClient=新的DefaultHttpClient();
最终HttpParams params=mHttpClient.getParams();
setConnectionTimeout(参数,HTTP_超时);
HttpConnectionParams.setSoTimeout(参数,HTTP_超时);
setTimeout(参数,HTTP_超时);
}  
返回mHttpClient;
}
//
//
公共静态字符串executeHttpPost(字符串url、ArrayList后参数)引发异常
{  
BufferedReader in=null;
尝试
{  
HttpClient=getHttpClient();
HttpPost请求=新的HttpPost(url);
UrlEncodedFormEntity formEntity=新的UrlEncodedFormEntity(后参数);
请求。setEntity(formEntity);
HttpResponse response=client.execute(请求);
in=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
StringBuffer sb=新的StringBuffer(“”);
字符串行=”;
字符串NL=System.getProperty(“line.separator”);
而((line=in.readLine())!=null)
{  
sb.追加(行+NL);
}  
in.close();
字符串结果=sb.toString();
返回结果;
}
最后
{  
if(in!=null)
{  
尝试
{  
in.close();
}捕获(IOE异常)
{  
e、 printStackTrace();
}
}
}
}
//
//
公共静态字符串executeHttpGet(字符串url)引发异常
{  
BufferedReader in=null;
尝试
{  
HttpClient=getHttpClient();
HttpGet请求=新建HttpGet();
setURI(新的URI(url));
HttpResponse response=client.execute(请求);
in=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
StringBuffer sb=新的StringBuffer(“”);
字符串行=”;
字符串NL=System.getProperty(“line.separator”);
而((line=in.readLine())!=null)
{  
sb.追加(行+NL);
}  
in.close();
字符串结果=sb.toString();
返回结果;
}
最后
{  
if(in!=null)
{  
尝试
{  
in.close();
} 
捕获(IOE异常)
{  
e、 printStackTrace();
}
}
}
}
//
}  
如下所示:

 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);
 } 
 }
公共类postmethod扩展了AsyncTask{
//你需要什么
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//在这里完成你的工作,这将作为背景运行
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
} 
}
使用此异步类:

         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...

        } 


       }

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

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();
    }
}
公共类InnerClass扩展异步任务{
进程对话;
@凌驾
受保护字符串doInBackground(无效…参数){
String result=Adapter\u Custom\u Http\u Client.executehttpost(url,param);
返回结果;
}
@凌驾
受保护的void onCancelled(){
super.onCancelled();
}
@凌驾
受保护的void onPostExecute(字符串结果){
dialog.dismise();
super.onPostExecute(结果);
}
@凌驾
受保护的void onPreExecute(){
dialog=ProgressDialog.show(上下文“,”请稍候…);
super.onPreExecute();
}
}
并使用


新的InnerClass().execute()

为了适应你提议的上述课程,我必须如何改变我的课程。例如,在我的主类中,我使用参数调用executehttpost方法。我现在该怎么称呼它呢?我该如何改变我的课程以适应你提议的上述课程。例如,在我的主类中,我使用参数调用executehttpost方法。我现在该如何调用它呢?您可以在Void doInBackground(Void…params)方法中调用该类或方法..并实例化我编辑的异步类..只需将该代码httppost放在doInBackground中,并像这样调用该asynctask方法:postmethod post=new postmethod();post.execute();在代替httppostok的情况下,我可以这样做,但是如何传递executeHttpPost所需的参数(字符串url、ArrayList后参数)?对不起,我只是对asynctask有点陌生。k。。。没问题…我已经解释过了。。。在这个地方,你必须声明你想做什么,但是它只会在帖子完成后执行。该对话框仅显示一秒钟。
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();
    }
}