Обновление вида из сокетного соединения - PullRequest
1 голос
/ 19 апреля 2011

Я пишу приложение, которое должно получать данные из сокета каждые 10 секунд или около того, а затем рисует вид на экране, чтобы отобразить эти данные. К сожалению, я довольно новичок в Android и у меня возникли проблемы с пониманием, как заставить это работать. Я немного читал о обработчиках, но я не совсем уверен, как их использовать. Можете ли вы использовать их с классом, расширяющим представление, или мне вообще не нужно их использовать?

1 Ответ

0 голосов
/ 19 апреля 2011

Использование обработчика представляется правильным подходом, поскольку вы обновляете свой пользовательский интерфейс из потока, не являющегося пользовательским интерфейсом (по крайней мере, так должно быть!) ... Вы можете использовать обработчик, как этот, или выполнять обработку данных из вашегоАктивность и вызов CustomView.draw () из Обработчика в вашей Активности.

public class CustomView extends View {

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public CustomView(Context context) {
        super(context);
        ...
        startThread();
        ...
    }

    @Override
    public void onDraw(Canvas canvas) {
        ...
        //Do drawing...canvas.drawBitmap(bitmap) or w/e
        ...
    }

    private void startThread() {
        Thread thread = new Thread() {
            public void run() {
                try {
                    doSocketRequest();
                } catch (SocketException e) { // Or w/e exceptions are applicable
                    e.printStackTrace();
                } finally {
                    Message msg = new Message();
                    //msg.obj = ObjectContainingInformationTheHandlerMightNeed
                    mHandler.sendMessage(msg);//replace 0 w/ a message if need be

                }
            }
        };
    }

    private void doSocketRequest() {
        ...
        //Do your socket stuff here
        ...
    }

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            ...
            //Do graph processing stuff
            ...
            invalidate(); //forces onDraw
        }
    };

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...