簡體   English   中英

在AsyncTask類的onPostExecute中顯示Toast的問題

[英]Issues on displaying Toast within onPostExecute of AsyncTask class

在這個論壇上有很多關於這個問題的問題,但是沒有一個對我有用。 所以我在這里問這個問題。 我正在嘗試從MySQL數據庫讀取數據。 使用PHP Web服務成功從數據庫中獲取數據后,我想顯示數據。 但是當我為此使用Toast時,Eclipse阻止我編寫Toast命令並向我顯示錯誤

Toast類型的方法makeText(Context,CharSequence,int)不適用於參數(VersionReader,String,int)

Java代碼是:

public class VersionReader extends AsyncTask<URI, Integer, Integer>{

    private String TAG = "RESULT";

    int version = 0;
    int local_version = 0;
    public VersionReader(int local_version){
        this.local_version = local_version;
    }
    @Override
    protected Integer doInBackground(URI... urls) {
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpGet request = new HttpGet();
            request.setURI(urls[0]);
            HttpResponse response = httpclient.execute(request);
            BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            version = Integer.parseInt(in.readLine());
        }catch(Exception e){
            e.printStackTrace();
        }
        return version;
    }
    @Override
    protected void onPostExecute(Integer result) {
        super.onPostExecute(result);
        Toast.makeText(this, "The lastest version is " + result, Toast.LENGTH_SHORT).show();
    }
}

有誰知道如何擺脫這個問題?

只需更換

Toast.makeText(this, "The lastest version is " + result, Toast.LENGTH_SHORT).show();

Toast.makeText(getApplicationContext(), "The lastest version is " + result, Toast.LENGTH_SHORT).show();

注意:如果您的VersionReader類在Activity

由於您的VersionReader類不是insode ActivityService ,請在您的類中創建一個Context全局變量,然后從Constructor中獲取它。

private Context context;

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

並在onPostExecute()中使用

Toast.makeText(context, "The lastest version is " + result, Toast.LENGTH_SHORT).show();

更改,因為這里this類似於給VersionReader的AsyncTask

Toast.makeText(this, "The lastest version is " + result, Toast.LENGTH_SHORT).show();

Toast.makeText(YourActivity.this, "The lastest version is " + result, Toast.LENGTH_SHORT).show(); 

要么

Toast.makeText(getApplicationContext(), "The lastest version is " + result, Toast.LENGTH_SHORT).show();

編輯

public class VersionReader extends AsyncTask<URI, Integer, Integer>{

    private Context context;
    public VersionReader(Context context) {
            this.context = context; 
    }
    // Blah blah
    // Then use the context any where
}

onPreExecute(),onPostExecute(Result)在ui線程上調用。 因此,您可以在這里展示烤面包。

 Toast.makeText(YourActivity.this, "The lastest version is " + result,Toast.LENGTH_SHORT).show(); 

為了清楚起見,請檢查鏈接

使構造函數如下:

Context ctx;

public VersionReader(int local_version , Context c){
    this.local_version = local_version;
    this.ctx = c;
}

現在,在您的Toast中使用此ctx變量。

Toast.makeText(ctx, "The lastest version is " + result, Toast.LENGTH_SHORT).show();

更換

   Toast.makeText(this, "The lastest version is " + result, Toast.LENGTH_SHORT).show();

Toast.makeText(getApplicationContext(), "The lastest version is " + result, Toast.LENGTH_SHORT).show();

這里this是指VersionReader類不是你的活動 所以更換

Toast.makeText(this, "The lastest version is " + result, Toast.LENGTH_SHORT).show();

Toast.makeText(getApplicationContext(), "The lastest version is " + result, Toast.LENGTH_SHORT).show();

使用getApplicationContext()

Toast.makeText(getApplicationContext(), "The lastest version is " + result, Toast.LENGTH_SHORT).show();

因為即使您銷毀了Activity,AsyncTask仍在后台運行。 因此,如果您使用ActivityName.this ,那么即使銷毀了活動,它也會找到活動參考。 所以會給出錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM