如何将方法放入AsyncTask

时间:2014-06-18 21:00:32

标签: java android methods android-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);
            }   
}

4 个答案:

答案 0 :(得分:1)

  1. 声明AsyncTask<Void, String, Void>
  2. 将此代码放在doInBackground()
  3. 将所有出现的wyniki.setText(whatever);替换为publishProgress(whatever);
  4. onProgressUpdate()中,使用wyniki.setText(progress[0]);
  5. 最后两个步骤很重要,您无法从后台线程更改UI视图。

答案 1 :(得分:0)

创建一个扩展AsyncTask并覆盖其doInBackground()方法的新类。将你的licz()方法放在其中。

答案 2 :(得分:0)

实施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相关的更改。

答案 3 :(得分:0)

更改方法并使其返回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);
    }
}