更新进度条的AsyncTask

时间:2013-11-13 14:11:54

标签: java android android-asynctask androidhttpclient

我有一个AsyncTask当前在登录时显示一个微调器对话框,但从用户的角度来看它并不能很好地工作,然后在完成时将所有内容旋转到第二个intent - 它看起来当你有一个好的信号但当信号不好或者从3G跳到wifi中句时它会起作用垃圾

如此。我想要的是一个登录页面,通过在提交点击时显示一个进度条对话框,只有在完成后才跳到第二个intent

这是我到目前为止所拥有的

package com.pprem.include;

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.net.URI;  
import java.util.ArrayList;  
import org.apache.http.HttpResponse;  
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;  
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.conn.params.ConnManagerParams;  
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;  
import org.apache.http.params.HttpParams;  

public class Include_CustomHttpClient {  
    /** The time it takes for our client to timeout */  
    public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds  

    /** Single instance of our HttpClient */
    private static HttpClient mHttpClient;  

    /** 
    * Get our single instance of our HttpClient object. 
    * 
    * @return an HttpClient object with connection parameters set 
    */  
    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;  
    }

    /** 
    * Performs an HTTP Post request to the specified url with the 
    * specified parameters. 
    * 
    * @param url The web address to post the request to 
    * @param postParameters The parameters to send via the request 
    * @return The result of the request 
    * @throws Exception 
    */  
    public static String executeHttpPost(String url, ArrayList<NameValuePair> 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();  
                }
            }
        }
    }  
    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();  
                }
            }
        }
    }
}  

然后在实际活动中调用它

                    status="passed";
                    final class GetUserHttpTask
                            extends
                            AsyncTask<String/* Param */, Boolean /* Progress */, String /* Result */> {

                        @Override
                        protected String doInBackground(String... params) {
                            publishProgress(true);
                            try {
                                getUserPhpResponse = Include_CustomHttpClient.executeHttpPost(settings.getServer() + "getUser.php", postParameters);
                                return getUserPhpResponse;                  
                            } catch (Exception e) {
                                e.printStackTrace();
                                return "";
                            }
                        }
                        @Override
                        protected void onPostExecute(String getUserPhpResponse) {
                            publishProgress(false);

                            //result = result.replaceAll("\\s+",""); 
                            settings.setFullname(getUserPhpResponse);
                            JSONObject jObject;
                            try {
                                jObject = new JSONObject(getUserPhpResponse);
                                settings.setFullname(jObject.getString("fullname"));
                                settings.setAdministrator(jObject.getString("administrator"));

                                if (status=="passed"){
                                    //start the second Activity


                                    gotofrmListSchema.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                                    gotofrmListSchema.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                                    startActivity(gotofrmListSchema);
                                }
                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }   

                    new GetUserHttpTask().execute();

1 个答案:

答案 0 :(得分:0)

我认为你需要这样的东西

private class RemoteTask extends AsyncTask<Object, Void, String > {

    private ProgressDialog dialog;
    private Context context;

    private RemoteTask(Context context) {
        this.context = context;
        this.dialog = new ProgressDialog(context);
    }

    @Override
    protected void onPreExecute() {
            dialog.setMessage(getResources().getString(R.string.loading));
            dialog.show();
    }

    @Override
    protected String  doInBackground(Object... objects) {
        return client.executeGet(objects[0]);

    }

    @Override
    protected void onPostExecute(String  result) {
            if (dialog.isShowing())
                dialog.dismiss();
            ...
            //start new activity here
    }

}