进程对话框没有正确显示?

时间:2013-07-01 06:50:51

标签: android

这是我的函数,在LoginActivity.java.So onclick of button我正在调用这个函数。

public  void postHttpRequest(String userId,String pass,TextView error){
        RequestClient reqClient = new RequestClient(LoginActivity.this);
        String AppResponse = null;
        try {
            url = "myurl";
            Log.d("URL", url);
            AppResponse = reqClient.execute().get();
            String status = ValidateLoginStatus.checkLoginStatus(AppResponse);
            Log.d("Status recived", status);

            if(status.equals("200")){
                saveInformation(userId,pass);
                startingActivity(HOST_URL);
            }else{
                error.setText("Incorrect UserName or Password");
            }
        } catch (Exception e) {
            Log.e("Exception Occured", "Exception is "+e.getMessage());
        }
    }

从这个函数我调用AsynkTask进行Http Communication.So onclick of button当我打算响应然后我的processDialog打开一秒钟。我想当我点击buttoon我的processDialog应该打开utill我得到了回应

public class RequestClient extends AsyncTask<String, Void, String>{
    ProgressDialog pDialog;
    Context context;

    public RequestClient(Context c) {
        context = c;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(context);
        pDialog.setMessage("Authenticating user...");
        pDialog.show();

    }

    @Override
    protected String doInBackground(String... aurl){
    String responseString="";
    DefaultHttpClient httpClient=new DefaultHttpClient();
    try {
         HttpClient client = new DefaultHttpClient();  
         HttpGet get = new HttpGet(LoginActivity.url);
         HttpResponse responseGet = client.execute(get);  
         HttpEntity resEntityGet = responseGet.getEntity();  
         if (resEntityGet != null) {  
             responseString = EntityUtils.toString(resEntityGet);
             Log.i("GET RESPONSE", responseString);
         }
    } catch (Exception e) {
        Log.d("ANDRO_ASYNC_ERROR", "Error is "+e.toString());
    }
    Log.d("ANDRO_ASYNC_ERROR", responseString);
     httpClient.getConnectionManager().shutdown();
     return responseString;

    }


    @Override
    protected void onPostExecute(String response) {
         super.onPostExecute(response); 
            if(pDialog!=null) 
            pDialog.dismiss();
    }
}

因此,请建议我必须做出哪些更改,以便processDialog在设备的中心正确显示

3 个答案:

答案 0 :(得分:1)

//在progressbialog中添加样式

 protected void onPreExecute() {
            super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pDialog.setMessage("Authenticating user..."); 

if (pDialog != null && !pDialog.isShowing()) {
                        pDialog.show();
                    }
}

答案 1 :(得分:0)

您的按钮代码似乎不正确,因为它是异步的,但您尝试将其用作标准同步代码。

尝试将此代码移动到onPostExecute:

String status = ValidateLoginStatus.checkLoginStatus(response);
            Log.d("Status recived", status);

            if(status.equals("200")){
                saveInformation(userId,pass);
                startingActivity(HOST_URL);
            }else{
                error.setText("Incorrect UserName or Password");
            }

并使此按钮单击代码:

public  void postHttpRequest(String userId,String pass,TextView error){
        RequestClient reqClient = new RequestClient(LoginActivity.this);
        String AppResponse = null;
        try {
            url = "myurl";
            Log.d("URL", url);
            reqClient.execute();
        } catch (Exception e) {
            Log.e("Exception Occured", "Exception is "+e.getMessage());
        }
    }

答案 2 :(得分:0)

AsyncTask return value only after using get() method

从上述链接中提取

调用get()的{​​{1}}方法将阻塞主线程并等待返回结果。这有效地使AsyncTask成为同步操作,在这种情况下使用AsyncTask没有意义。

我能想到使用AsyncTask方法的唯一原因是来自主(UI)线程以外的线程,尽管我想不出有很多理由这样做。

点击按钮

get()

在您的活动课程中

       RequestClient reqClient = new RequestClient(LoginActivity.this,new TheInterface() {
             @Override
             public void theMethod(String result) {
                 Log.i("Result  =",result); 
            }  
        });
       reqClient.execute(url); // no get(). pass url to doInBackground()      

的AsyncTask

    public interface TheInterface {  
    public void theMethod(String result);

       }
     }