Ваш синглтон в порядке. Проблема в том, что вы создаете экземпляр класса GrouseSingleton
и сразу после этого получаете значение a
, которое является значением по умолчанию «hello». Таким образом, вам нужно использовать interface
, как показано ниже, чтобы сообщить своему activity
, когда значение a
получено с сервера:
public interface ResultListener {
void onResultFetched(int textViewId, String txt);
}
В вашей деятельности:
try {
grouseSingleton = GrouseSingleton.getInstance(new ResultListener () {
@Override
public void onResultFetched(int textViewId, String txt) {
TextView tv45 = findViewById(id);
tv45.setText(txt);
});
grouseSingleton.startThread();
} catch (IOException e) {
e.printStackTrace();
}
установите слушателя в свой GrouseSingleton
класс:
private static ResultListener listener;
public static GrouseSingleton getInstance(ResultListener listener) throws IOException {
if (instance == null) {
instance = new GrouseSingleton();
GrouseSingleton.listener = listener;
}
return instance;
}
public void startThread() throws IOException {
new Thread() {
public void run() {
try {
grouseWeather = Jsoup.connect("https://www.grousemountain.com/current_conditions#weather").get();
runOnUiThread( new Runnable()
{
public void run()
{
a = grouseWeather.select("h3.metric").first().text();
listener.onResultFetched(txtViewId, a);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}