簡體   English   中英

如何將方法放入AsyncTask

[英]How to put method into the AsyncTask

你好,我沒什么問題。 我應該如何將該方法放在asyncTask中或在何處,或者可能更好,它應該如何在asyncTask中看起來。

這是我的代碼

public void licz()
{
     wyniki.setText("");
        N = Integer.parseInt(liczbaN.getText().toString()); 
        tablica = new String [90];
        int i=0;
            for(licz1=99;licz1>=10;licz1--)
            {
                for(licz2=10;licz2<=licz1;licz2++)
                {
                    if(N==licz1/licz2 && licz1%licz2==0)
                    {
                        String nap1 = Integer.toString(licz1);
                        String nap2 = Integer.toString(licz2);
                        napis = (nap1+ " " + nap2 +"\n");   // moj string
                        lista.add(napis);
                        tablica[i]=napis;
                        i++;    
                        wyniki.setText("");
                    }                   
                }
                String listString = "";
                for (String s : tablica)
                {
                    listString += s;
                }
                listString=listString.replaceAll("null", "");
                wyniki.setText(listString);
            }   
}
  1. 聲明AsyncTask<Void, String, Void>
  2. 將此代碼放入doInBackground()
  3. 替換所有出現的wyniki.setText(whatever); publishProgress(whatever);
  4. onProgressUpdate() ,使用wyniki.setText(progress[0]) ;

最后兩個步驟很重要,您無法從后台線程更改UI視圖。

創建一個擴展AsyncTask並覆蓋其doInBackground()方法的新類。 將您的licz()方法放入其中。

實現AsyncTask類並覆蓋其方法:

private class MyTask extends AsyncTask<String, Void, String> {
@Override
    protected String doInBackground(String... params) {
        //Put your code here

        return "Executed";
    }

    @Override
    protected void onPostExecute(String result) {
        //do something after background execution is complete
        //Executes on main thread
    }

    @Override
    protected void onPreExecute() {
         //do something before background execution starts
        //Executes on main thread
    }
}  

調用new MyTask().execute("");

注意:
更新onPostExecute與UI相關的更改。

更改您的方法,並使其返回String而不是void

public String licz() {
    String result = "";
    // do your fancy array stuff
    return result;
}

然后創建一個擴展AsyncTask<Void, Void, String>並在doInBackground()調用您的方法並返回結果。 比在onPostExecute()使用結果並更新TextView:

private class MyTask extends AsyncTask<Void, Void, String> {
    @Override   
    protected String doInBackground(Void... params) {
        return licz();
    }

    @Override
    protected void onPostExecute(String result) {
        wyniki.setText(result);
    }
}

暫無
暫無

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

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