powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Android обращение к View из класса
25 сообщений из 39, страница 1 из 2
Android обращение к View из класса
    #38190026
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть класс в отдельном файле
он вызывается в отдельном потоке.
как из этого класса обратиться к View?
напрямую нельзя, т.к. к окну можно получить доступ только из основного потока.
работает через Handler

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class SliderActivity extends Activity {
    static public EditText edtext;
    
    static public String ms;
    static Handler h = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            edtext.setText(ms);
        } ;
    };



вот при таком обращении из отдельного класса
Код: java
1.
2.
 SliderActivity.ms=message;
 SliderActivity.h.sendEmptyMessage(R.id.editText1);




для одного view это еще допустимо...
а как сделать для любого view?
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190148
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я хочу это развидеть. Посмотрите в сторону AsyncTask.
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190198
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотрел, но ничего не пришло в голову
поподробнее можно?
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190240
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадясмотрел, но ничего не пришло в голову
поподробнее можно?
какое слово здесь непонятно вадя? спрашивай, объясним.
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190299
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
честно - ничего.
основное как прикрутить к моей проблеме.
Handler не устраивает по причине - static
я передаю
public void handleMessage(Message msg) {
edtext.setText(ms);
} ;
R.id.editText1, но выбрать по id не позволяет statis.
и передается отдельно id (которое в даном случае не возможно использовать) и само значение отдельно, разными способами

и поэтому не поятно как может помочь AsyncTask.

лучше б на каком-нибудь примере под мою проблему ?

задача стоит так: из класса нужно заполнить определённое view.
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190389
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадялучше б на каком-нибудь примере под мою проблему ?
вадя, там же есть пример по ссылке.

вадязадача стоит так: из класса нужно заполнить определённое view.
я все с первого раза прекрасно понял. теперь смотри пример и смекай.
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190428
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смекаю
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  
CatTask cattask;
 public void ddd_clic(View v) {
        cattask = new CatTask();
        cattask.execute(R.id.textView1);
    }

    class CatTask extends AsyncTask<Integer, Void, Void> {
		@Override
		protected Void doInBackground(Integer... params) {
			//edtext = (EditText) findViewById(R.id.textView1);
		
			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			super.onPostExecute(result);
			//edtext = (EditText) findViewById(R.id.textView1);
			edtext.setText("Залез");
		}




стоит только раскоментировать - вылет.
оно и понятно findViewById только в основном потоке.

?
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190516
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадястоит только раскоментировать - вылет.
оно и понятно findViewById только в основном потоке.
?
ну так и в чем вопрос? в doBackground делаем то, что должно быть сделано в фоновом потоке. в onProgressUpdate апдейтим состояние GUI, если нужно как-то прогресс показывать, в onPostExecute опять же таки делаем что хотим с GUI показывая, что мы закончили. к тому же рекоммендуется передавать не контрол в AsyncTask, и не его id, а класс callback, например
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class MyActivity {
     interface MyCallback {
            onProgress();
            onFinish();
     }

...
new MyAsyncTaks().execute(new MyCallback() {
     onProgress() {}
     onFinish() {editText.setText()}
}
);


}


в AsyncTask вызываем методы myCallback.onProgress или myCallback.onFinish. с параметрами или без.
еще элегантней решение на основе событий roboguice


Вопросы?
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190541
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
частично решил (реализация "в лоб")

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
	MyTask mt;

    public void ddd_clic(View v) {
    	 mt = new MyTask();
    	 int d=R.id.editText1;
    	    mt.execute(d+":"+"88888888");

    }
    
    class MyTask extends AsyncTask<String, String, Void> {

		@Override
		protected Void doInBackground(String... params) {
			publishProgress(params[0]);
			return null;
		}
        
		 @Override
	        protected void onProgressUpdate(String... values) {
	          super.onProgressUpdate(values);
	          String[] f=values[0].split(":");
	          int d=Integer.parseInt(f[0]);
	          edtext = (EditText) findViewById(d);
	          edtext.setText(f[1]);
	        }
      }



а как это всё вызывать из класса в другом файле?
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190554
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пусть у вас
Код: java
1.
 SliderActivity slact=...



Тогда из любого потока можно обратиться
Код: java
1.
2.
3.
4.
5.
  slact.runOnUiThread (new Runnable() {
         public void run() {
             edtext.setText(ms);
         }
  });
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190613
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяа как это всё вызывать из класса в другом файле?Вадя, извини за резкость, но у тебя акцесс головного мозга или что? Кому я написал всю ту херню ровно одним постом выше?
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190664
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TC настоятельно рекомендую прежде чем писать дальше ознакомиться с какой-нибудь толковой книжкой по основам Java (например Брюс Эккель "Философия Java"),вы даже не понимаете, что вам пытаются объяснить. Но если все же отравление аксессом не прошло, посмотрите пример, как это работает с диалогами.
тынц
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190831
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё что предложено работает,но из класса в отдельном файле видны только static поля и методы.

книжки я читал, только не всегда удаётся применить прочитанное к конкретному случаю.
пытаюсь прочитанное применить на практике.
поэтому и спрашиваю
я знаю, что ничего не знаю, но я стремлюсь узнать всё (не моё)

зы
не в обиду, многим здесь не помешала бы практика работы с базами, акс в этом плане очень полезен.
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38190938
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditTC настоятельно рекомендую прежде чем писать дальше ознакомиться с какой-нибудь толковой книжкой по основам Java (например Брюс Эккель "Философия Java"),вы даже не понимаете, что вам пытаются объяснить. Но если все же отравление аксессом не прошло, посмотрите пример, как это работает с диалогами.
тынц

в примере AsyncTask запускается из основного потока, у меня если запустить из основного - тоже работает.
у меня есть класс
Код: java
1.
class SSLWebSocketClient extends WebSocketClient {


, если его расположить в
Код: java
1.
public class SliderActivity extends Activity {


то всё работает так как надо
но если этот класс вынести в отдельный файл. тут и начинаются проблемы
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191129
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не в обиду, у многих здесь есть практика с НАСТОЯЩИМИ СУБД.
Покажите ваш код, иначе у меня просто кровь из глаз идет, когда я читаю.
Я не спец по Java, но повторюсь фраза "всё что предложено работает,но из класса в отдельном файле видны только static поля и методы" взрывает мне мозг. Прочитайте, что такое MVC/MVP, как только поймете - жить будет проще.
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191252
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяно если этот класс вынести в отдельный файл. тут и начинаются проблемы
Вадя, я уже тебе написал про коллбэки 14069563
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191460
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaвадяно если этот класс вынести в отдельный файл. тут и начинаются проблемы
Вадя, я уже тебе написал про коллбэки 14069563

можно более детальный пример?
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191486
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяchpashaпропущено...

Вадя, я уже тебе написал про коллбэки 14069563

можно более детальный пример?
чем не годится тот, что уже есть? это уже готовое (рекомендуемое) решение твоей проблемы
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191508
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не доходит как прикрутить к моей задаче

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
package org.slider;

import 

public class SliderActivity extends Activity {

    public EditText edtext;
    SSLWebSocketClient SSLclient;
    int ii = 0;
    MyTask mt;
   

    @SuppressLint("HandlerLeak")
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Slider slider = new Slider(this);

        int[] d = {R.layout.a_first, R.layout.b_second, R.layout.d_xxx};
        for (int i = 0; i < d.length; i++) {
            slider.addView((RelativeLayout) RelativeLayout.inflate(this, d[i], null));
        }
        setContentView(slider);

        edtext = (EditText) findViewById(R.id.editText1);
        edtext.setText("начало");
        
        mt = new MyTask();
	try {
            SSLclient = new SSLWebSocketClient(new URI("wss://192.168.0.4:8887"));
           } catch () {}
    }

    class SSLWebSocketClient extends WebSocketClient {
        @Override
        public void onMessage(String message) {
            int d = R.id.editText1;
            xx(d, message);
        }
        @Override
        public void onClose(int code, String reason, boolean remote) {
            System.out.println("Disconnected");
            System.exit(0);
        }
        @Override
        public void onError(Exception ex) {
            System.out.println("****************" + ex.toString());
        }
    }


    class MyTask extends AsyncTask<String, String, Void> {

        @Override
        protected Void doInBackground(String... params) {
            publishProgress(params[0]);
            return null;
        }

        @Override
        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            String[] f = values[0].split(":");
            int d = Integer.parseInt(f[0]);
            edtext = (EditText) findViewById(d);
            edtext.setText(f[1]);
        }
    }

    public void ddd_clic(View v) {
		 SSLclient.send(edtext.getText().toString() + ii++);
		 int d = R.id.editText1;
		 xx(d , "ddd_clic");
    }

    public void xx(int i, String v) {
        mt = new MyTask();
        mt.execute(i + ":" + v);
    }
}






вынести класс SSLWebSocketClient в отдельный файл
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191585
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ох вадя, вадя

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
public class SSLClientWorker extends AsyncTask<SSLClientWorker.SSLClientWorkerCallback, String, String>
{

    public interface SSLClientWorkerCallback
    {
        URI getURI();
        String getMessage();
        void onProgress(String action);
        void onFinish(String result);
    }

    private SSLClientWorkerCallback callback;

    @Override
    protected String doInBackground(SSLClientWorkerCallback... callbacks)
    {
        this.callback = callbacks[0];
        SSLWebSocketClient client = new SSLWebSocketClient(callback.getURI());
        publishProgress("Sending message");
        client.send(callback.getMessage());
        return "Finished";
    }

    @Override
    protected void onProgressUpdate(String... messages)
    {
        callback.onProgress(messages[0]);
    }

    @Override
    protected void onPostExecute(String result)
    {
        callback.onFinish(result);
    }
}

public class MyActivity extends Activity
    {
        public void onClick(View v)
        {
            new SSLClientWorker().execute(new SSLClientWorker.SSLClientWorkerCallback()
            {
                @Override
                public URI getURI()
                {
                    return new URI("wss://192.168.0.4:8887");
                }

                @Override
                public String getMessage()
                {
                    return "Hello WebSocket, are you there?";
                }

                @Override
                public void onProgress(String action)
                {
                    editText.setText(action);
                }

                @Override
                public void onFinish(String result)
                {
                    editText.setText(action);
                }
            });
        }
    }



уже что-то проясняется?
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191656
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к сожалению не то
я сократил часть кода, видимо. зря

try {
WebSocketImpl.DEBUG = false;
SSLclient = new SSLWebSocketClient(new URI("wss://192.168.0.4:8887"));
// load up the key store
String STORETYPE = "BKS";
String KEYSTORE = "//mnt//sdcard//crt//zz.bks";
String STOREPASSWORD = "1qaz";
String KEYPASSWORD = "1qaz";

KeyStore ks = KeyStore.getInstance(STORETYPE);
File kf = new File(KEYSTORE);
ks.load(new FileInputStream(kf), STOREPASSWORD.toCharArray());

KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(ks, KEYPASSWORD.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(ks);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

SSLclient.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(sslContext));

SSLclient.connectBlocking();

} catch

это запускает процес работы с websockets вотдельном потоке потоке один раз при запуске приложения.
всё работает асинхронно. класс SSLWebSocketClient вызывается из этого потока при получении данных по каналу wss

прошу сильно не пинать, я только учусь...
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191723
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяк сожалению не то
я сократил часть кода, видимо. зря
трындец ... ... ... нафига было морочить голову столько времени. тут нужен как минимум отдельный сервис , который будет шебуршать со своими сокетами и кидать основному приложению сообщения, например через LocalBroadcastManager . a теперь айда в гугл, документацию читать.
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191803
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"сервис" есть (SSLclient ) , работает, кидает свои сообщения в SSLWebSocketClient
если SSLWebSocketClient в основном файле - проблем нет.
в этом случае я прекрасно раскидываю полученные сообщения по нужным view.
и отправляю сообщения серверу.
сообщения от сервера парсятся и передаются соответствующему (заданному в сообщении) view.
но класс SSLWebSocketClient разрастается и его надо сделать отдельным файлом.
смарефон прекрасно обменивается по wifi по протоколу wss с сервером.
прошу прощения за корректно описанную проблему.
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191884
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя"сервис" есть (SSLclient )
вадя, не тупи. с какого перепугу SSLClient у нас сервис? ты уже начнешь ходить по ссылкам, которые тебе дают?

что это за WebSocketClient? этот?
...
Рейтинг: 0 / 0
Android обращение к View из класса
    #38191953
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://github.com/Davidiusdadi/Java-WebSocket
по ссылка хожу, но видимо перегрелся...не получается въехать в логику андроида
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Android [игнор отключен] [закрыт для гостей] / Android обращение к View из класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]