2012-09-21 31 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是静态的(不是一个解决方案只是一个尝试),并且希望它现在可以解散。