状况
我正在为我的大学数学课程开发Android应用程序(我正在使用Android Studio)。我在特定片段中所做的是以下内容:
正如您在此处所看到的,我必须在“单独”位置(AsyncTask)中执行该for
循环,因为它将成为UI的问题。
问题
当我必须编码上面列表中的第4点时,我遇到了麻烦。您可以在this pastebin中查看整个代码。在这里,我想指出主要问题。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_disequazioni_generali, container, false);
Button button = (Button) view.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialog = ProgressDialog.show(view.getContext(), "", "Attendi...", false, true);
//valori degli estremi
EditText val_a = (EditText) view.findViewById(R.id.val_a);
EditText val_b = (EditText) view.findViewById(R.id.val_b);
a = Double.parseDouble(val_a.getText().toString());
b = Double.parseDouble(val_b.getText().toString());
derivata = getDerivative(funzione, variabili, "x");
//setup tableview + task
tl = (TableLayout) view.findViewById(R.id.tableLayoutTangenti);
TextView coefficente = new TextView(view.getContext());
EditText decimale = new EditText(view.getContext());
mAuthTask = new TaskAsincrono();
mAuthTask.execute((Void) null);
}
});
正如你在这里看到的,我正在创建一个新对象,因为我需要使用AsyncTask(如下所示):
public class TaskAsincrono extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute(){
}
@Override
protected void onProgressUpdate(Void[] values) {
};
@Override
protected Boolean doInBackground(Void... params) {
double x = a;
double y = b;
//Definizione dell'intervallo
risultati = separaRadici(funzione, x, y, 500);
int k = 0;
for (int i = 0; i < (risultati.size()); i += 2) {
k++;
double a = risultati.get(i);
double b = risultati.get(i + 1);
double res = (b + a) / 2;
for (int j = 1; j < 10; j++) {
res = res - (getFunctionVal(funzione, res) / getFunctionVal(derivata, res));
}
soluzioni.add(res);
}
return true;
}
@Override
protected void onPostExecute(final Boolean success) {
if(dialog.isShowing()) { dialog.dismiss(); }
//THE ISSUE IS HERE
mostraRisultati();
}
@Override
protected void onCancelled() {
mAuthTask = null;
}
}
当AsyncTask完成工作时(=它已经完成了doInBackground中的所有操作)我需要调用mostraRisultati();
。
当AsyncTask完成执行for循环时,对话框消失,但方法mostraRisultati()
不起作用。有什么想法吗?
注意:如果查看pastebin,您可以看到整个代码。在测试时,我发现当AsyncTask完成其进程时会调用mostraRisultati(),但for
循环未运行,因为risultati.size()
为零。我错过了什么?