在AsyncTask上完成操作

时间:2016-08-02 16:04:52

标签: android android-studio android-asynctask

状况

我正在为我的大学数学课程开发Android应用程序(我正在使用Android Studio)。我在特定片段中所做的是以下内容:

  1. 点击“GENERATE”按钮
  2. 启动AsyncTask(内部有一个“大”的循环,从0到5000)
  3. AsyncTask正在运行时显示“正在加载......”等消息。
  4. 当AsyncTask完成该foor循环内的计算时,将TableRows添加到TableLayout
  5. 正如您在此处所看到的,我必须在“单独”位置(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()为零。我错过了什么?

0 个答案:

没有答案