您好我没问题。我应该如何以及在哪里将该方法放在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);
}
}
答案 0 :(得分:1)
AsyncTask<Void, String, Void>
。doInBackground()
。wyniki.setText(whatever);
替换为publishProgress(whatever);
onProgressUpdate()
中,使用wyniki.setText(progress[0])
; 最后两个步骤很重要,您无法从后台线程更改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);
}
}