Могу ли я использовать потоковое соединение (или другой метод), чтобы дождаться завершения функции sh, прежде чем отобразить результаты? - PullRequest
0 голосов
/ 22 марта 2020

Я преобразовал содержимое Textview texx; в строку, где я могу отобразить его в виде массива, однако он отображает содержимое textView до того, как задача doit () была выполнена, текущий вывод на экране - «TextView», я хочу, чтобы он отображал вывод TextView texx ; после того, как он закончил свою задачу. Любая помощь будет высоко ценится.

Я очень плохо знаком с android studio и java.

public class AppHome extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener {
    TextView texx;
    private ArrayList<String> al;
    private ArrayAdapter<String> arrayAdapter;
    private int i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_app_home);

        new doit().execute();

        texx= findViewById(R.id.text1);
        String text = texx.getText().toString();

        //String num = text;
        String[] str = text.split(",");
        final ArrayList al = new ArrayList<String>(Arrays.asList(str));





(Full code below)

package edward1700744uad.ac.finalproject;

import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;

import com.lorentzos.flingswipe.SwipeFlingAdapterView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class AppHome extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener {
    TextView texx;
    private ArrayList<String> al;
    private ArrayAdapter<String> arrayAdapter;
    private int i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_app_home);

        new doit().execute();

        texx= findViewById(R.id.text1);
        String text = texx.getText().toString();

        //String num = text;
        String[] str = text.split(",");
        final ArrayList al = new ArrayList<String>(Arrays.asList(str));

        arrayAdapter = new ArrayAdapter<>(this, R.layout.item, R.id.helloText, al );

        SwipeFlingAdapterView flingContainer = findViewById(R.id.frame);


        registerForContextMenu(flingContainer);


        flingContainer.setAdapter(arrayAdapter);

        flingContainer.setFlingListener(new SwipeFlingAdapterView.onFlingListener() {
            @Override
            public void removeFirstObjectInAdapter() {
                // this is the simplest way to delete an object from the Adapter (/AdapterView)
                Log.d("LIST", "removed object!");
                al.remove(0);
                arrayAdapter.notifyDataSetChanged();
            }

            @Override
            public void onLeftCardExit(Object dataObject) {
                //Do something on the left!
                //You also have access to the original object.
                //If you want to use it just cast it (String) dataObject
                Toast.makeText(AppHome.this, "left", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onRightCardExit(Object dataObject) {
                Toast.makeText(AppHome.this, "right", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAdapterAboutToEmpty(int itemsInAdapter) {
                // Ask for more data here
                al.add("XML ".concat(String.valueOf(i)));
                arrayAdapter.notifyDataSetChanged();
                Log.d("LIST", "notified");
                i++;
            }

            @Override
            public void onScroll(float scrollProgressPercent) {
            }
        });

        // Optionally add an OnItemClickListener
        /*
        flingContainer.setOnItemClickListener(new SwipeFlingAdapterView.OnItemClickListener() {
            @Override
            public void onItemClicked(int itemPosition, Object dataObject) {

            }
        });

         */

    }
    public class doit extends AsyncTask<Void, Void, String> {
        @Override
        protected String doInBackground(Void... voids) {
            String words = "";
            try {
                Document doc = Jsoup.connect("https://screenscrape4top40.000webhostapp.com/").get();
                words = doc.text();
            } catch(Exception e) {
                e.printStackTrace();
            }
            return words;
        }

        @Override
        public void onPostExecute(String words) {
            super.onPostExecute(words);
            texx.setText(words);
        }
    }


public void showPopup(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    popup.setOnMenuItemClickListener(this);
    popup.inflate(R.menu.dropdown_menu1);
    popup.show();
}

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item1:
                Toast.makeText(this, "Item 1 clicked", Toast.LENGTH_SHORT).show();
                return true;
                case R.id.item2:
                    Toast.makeText(this, "Item 2 clicked", Toast.LENGTH_SHORT).show();
                    return true;
                    case R.id.item3:
                        Toast.makeText(this, "Item 3 clicked", Toast.LENGTH_SHORT).show();
                        return true;
                        case R.id.item4:
                            Toast.makeText(this, "Item 4 clicked", Toast.LENGTH_SHORT).show();
                            return true;
                        default:
                            return false;
                    }
                }
            }


...