вызван из-за неправильного исключения потока - PullRequest
1 голос
/ 27 июня 2011

Пожалуйста, посмотрите на мой код ..

public class BseDemo extends Activity {
    final String feedUrlString = "http://www.bseindia.com/sensex/xml-data/sensexrss.xml";
    Uri uri;
    TextView tvs,tvd;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        Bse b = new Bse();
        b.start();


    }
    class Bse extends Thread{
        public void run(){
            try {
                tvs = (TextView)findViewById(R.id.text);
                tvd = (TextView)findViewById(R.id.diff);
                URL url = new URL(feedUrlString);
                DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
                Document doc = docBuilder.parse (new InputSource(url.openStream()));
                doc.getDocumentElement ().normalize ();
                Element e =  doc.getDocumentElement();
                NodeList nl = e.getElementsByTagName("title");
                Node bse = nl.item(2);
                String sen  = bse.getFirstChild().getNodeValue();
                tvs.setText(sen.substring(0, sen.indexOf("*")));
                tvd.setText(sen.substring(sen.indexOf("*")+1));
                tvd.setBackgroundResource(R.drawable.plus);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
}

У меня есть код, упомянутый выше, и я получаю исключение CalledFromWrongTreadException Пожалуйста, дайте какое-нибудь решение.

Ответы [ 3 ]

5 голосов
/ 27 июня 2011

Попробуйте реализовать AsyncTask , чтобы получить строку из документа (в doInBackground), затем используйте onPostExecute для установки текста в TextViews.

Is isлучший способ сделать фоновую логику без блокировки потока пользовательского интерфейса.

4 голосов
/ 27 июня 2011

попробуйте заглянуть в функцию runUIThread (...)

это исключение обычно происходит, когда вы редактируете некоторые компоненты пользовательского интерфейса из других потоков, кроме "основного"; Я думаю, проблема в:

tvs.setText(sen.substring(0, sen.indexOf("*")));
tvd.setText(sen.substring(sen.indexOf("*")+1));
tvd.setBackgroundResource(R.drawable.plus);
1 голос
/ 27 июня 2011

Вы не можете обновить пользовательский интерфейс из потока, не являющегося пользовательским интерфейсом (поток пользовательского интерфейса - это поток, который вызывает метод onCreate для Activity). Чтобы добиться того, что вы пытаетесь сделать, вам нужно использовать обработчик для отправки сообщения из текущей цепочки в ветку пользовательского интерфейса. Посмотрите на этот ответ, как это сделать: android: отображение диалогового окна прогресса при ожидании соединения

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