Может ли onProgressUpdate быть перегружен в активности? - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь принимать сокет-соединения от клиентов. Но в моем AsyncTask я столкнулся с двумя ситуациями, когда мне нужно обновить поток пользовательского интерфейса. В первом случае, когда сокет подключен, он должен изменить текущее представление содержимого. И второй случай, когда я получаю постоянный поток объектов, которые я обновляю в интерфейсе пользователя через publishProgress(). Как мне это сделать?

public class MainActivity extends AppCompatActivity {
   myCustomDrawingView view;
   ....
   ....
   .

   public static MainActivity getContext(){return context;}
   ....
   ..
   public class myCustomDrawingView extends View {
   ..
   ..
   }
   setNewContentView(){
     view = new myCustomDrawingView(this);
     setContentView(view);
   }
}




class ServerTask extends AsyncTask<Void, Action, Void>
{
    private WeakReference<MainActivity> mainActivity;
    private Action action;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mainActivity = new WeakReference<>(MainActivity.getContext());
    }

    @Override
    protected Void doInBackground(Void... voids) {
        ObjectInputStream stream;

        try{
            mainActivity.get().server = new ServerSocket(3107);
            mainActivity.get().socket = mainActivity.get().server.accept();
            stream = new ObjectInputStream(mainActivity.get().socket.getInputStream());

            (mainActivity.get()).setNewContentView(); 
            /*I know this won't work....
              But I want something like this to happen. 
              What are Alternatives?*/

            while(true)
            {
                if(isCancelled()){
                    break;
                }
                action = (Action)stream.readObject();
                publishProgress(action);
            }
        }catch (Exception exception)
        {
            exception.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(Action... actions) {
        super.onProgressUpdate(actions);
        ((mainActivity.get()).myCustomDrawingView).draw(actions[0]);
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...