2012-02-29 49 views
0
public class async extends AsyncTask<String, Integer, String>{ 
ProgressDialog prog; 
@Override 
protected void onPreExecute() { 

    super.onPreExecute(); 
    prog=new ProgressDialog(async.this);//This is chowing error 
    prog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    prog.setMax(100); 
    prog.show(); 

} 

    @Override 
    protected String doInBackground(String... params) { 
     for (int i = 0; i < 10; i++) { 
     publishProgress(5); 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

@Override 
protected void onPostExecute(String result) { 

    super.onPostExecute(result); 
    prog.dismiss(); 
} 
@Override 
protected void onProgressUpdate(Integer... values) { 
    prog.setProgress(values[0]); 
    super.onProgressUpdate(values); 
} 
} 

上面的代碼產生錯誤:ProgressDialog使用的AsyncTask生產構造未定義的錯誤

the constructor ProgressDialog(AndroidasynctaskActivity.async) is undefined

爲什麼會這樣呢?任何人都可以幫我解決這個問題嗎?

回答

6

如前所述,發生這種情況的原因是因爲您正在使用的ProgressDialog構造函數需要一個Context對象。以下是你如何做到這一點的一個例子。

修改您的async類並添加一個接受Context對象的單參數構造函數。然後修改onPreExecute方法以使用所述Context。例如:

public class async extends AsyncTask<String, Integer, String>{ 

    private Context context; 
    ProgressDialog prog; 

    public async(Context context) { 
    this.context = context; 
    } 


    @Override 
    protected void onPreExecute() { 
    super.onPreExecute(); 
    prog=new ProgressDialog(context); 
    prog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    prog.setMax(100); 
    prog.show(); 
    } 

    // ... 
} 

然後實例化並運行此AsyncTask

async mTask = new async(context); 
mTask.execute(params); 
+0

Thnak you marvin :) – Nav 2012-03-11 00:49:50

2

異步任務不提供應用程序或活動上下文。如果此類包含在調用它的活動中,則可能必須傳遞上下文。

+0

我如何通過它... u能請解釋一下有一個小例子...我有困難的理解它導致我嘗試了很多方法,但每次出現錯誤 – Nav 2012-03-01 04:54:42