2012-09-21 59 views
1

我不完成關閉我的Android應用程序進度條。 我聲明一個對象欄對象並獲取一個調用doInProgress函數的字符串並將它傳遞給一個名爲v1的對象。 當異步任務完成他的任務時,爲什麼進度條(出現wichs)不會像onPostExecute方法中聲明的那樣被解僱?進度條不排除

在我的活動我打電話:

ProgressDialog pDialog; 
response = new GetString(SecondActivity.this).execute(v1).get(); 

,這是myAsync任務:

package com.gms; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.utils.URLEncodedUtils; 
import org.apache.http.impl.client.DefaultHttpClient; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.AsyncTask; 


public class GetString extends AsyncTask<VariablesTable, Void, String> { 

     private Context context; 

     public ProgressDialog pDialog; 

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

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(context); 
      pDialog.setMessage("Loading.."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 


     protected void onPostExecute() { 
      // dismiss the dialog once got all details 
      if (pDialog.isShowing()){ 
       pDialog.dismiss(); 
      } 
     } 


     @Override 
     protected String doInBackground(VariablesTable... obj) { 
      // Making HTTP request 
      InputStream is = null; 

      try { 
        DefaultHttpClient httpClient = new DefaultHttpClient(); 
        String paramString = URLEncodedUtils.format(obj[0].cat, "utf-8"); 
        obj[0].url += "?" + paramString; 
        HttpGet httpGet = new HttpGet(obj[0].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(); 
      } 

       BufferedReader reader = null; 
       try { 
        reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
       } catch (UnsupportedEncodingException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       try { 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       try { 
        is.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       return sb.toString(); 
     } 
    } 

建議? 在此先感謝

+0

我認爲你的異步任務不行。而onPostExecute不是calle –

+0

問題是:你知道爲什麼onPostExecute沒有被調用? – FrankBr

+0

嘗試更改onPostExecute()onPostExecute(String resp) –

回答

0

CHCK後執行,我懷疑它的工作原理

嘗試改變onPostExecute()來onPostExecute(字符串RESP)

+0

仍然無法正常工作。 – FrankBr

0

我認爲問題在於你開始ASyncTask的方式。

response = new GetString(SecondActivity.this).execute(v1).get(); 

如果你是從UI線程調用它,它會使它在那裏阻塞。刪除.get()部件,以便線程可以繼續運行並正確執行您的onPreExecuteonPostExecute功能。

+0

我使用get()通過GetString Class獲取字符串響應。我會嘗試設置一個全局變量。 – FrankBr

+0

要麼是全局的,要麼是在onPostExecute中使用該字符串所需的內容...這仍然在UI線程上運行。 – Matthieu

+0

我刪除了get()但取消進度對話框,我需要觸摸屏幕。但我希望它被自動解僱。 – FrankBr

0

做()A的System.out在onPostExecute方法來檢查這個控制是否達到方法與否。如果onPost被執行並且對話框沒有被解除,那麼在UI線程中關閉對話框--- context.runOnUiThread,如果它仍然不起作用,那麼ProgressDialog是靜態的(不是一個解決方案只是一個嘗試),並且希望它現在可以解散。