Распознать текстовое представление в другом классе, определенном в том же Activity - Android - PullRequest
0 голосов
/ 06 октября 2011

У меня есть класс с именем Main, который расширяет Activity.В этом классе я определил другой класс, который расширяет поток.Я хочу установить текст в textView из метода класса myThread.Я отладил свою программу, но когда я хочу установить текст в текстовом представлении, он говорит, что источник не найден.

Вот мой код.Я надеюсь, вы лучше поймете, что я хочу объяснить.

Это происходит, когда я нажимаю кнопку.Это из моей функции onCreate в классе Main.

  b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {    
            pd = ProgressDialog.show(Main.this, "", "Downloading Data...", true, false);
            MyThread mThread = new MyThread();
            mThread.start();

                 }
    });   

Это класс myThread.

            class MyThread extends Thread {
            @Override
            public void run(){

                 String result=Main.this.parse();
                 TextView tv=(TextView) findViewById(R.id.textView5);
                 tv.setText(result);
                 Main.this.pd.dismiss();
            }
        }

Строка результата - это строка, которая перезапускается функцией, определенной в моем главном классе.Я подтвердил, и результат в порядке.Программа останавливается, когда я достигаю строки

       tv.setText(result);

Странно то, что в строке нет ошибок

        TextView tv=(TextView) findViewById(R.id.textView5);

Спасибо за любую помощь!: D

       @Override
       public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);   

    tv=(TextView) findViewById(R.id.textView5);
    Button b=(Button) findViewById(R.id.button1);
    final EditText et1=(EditText) findViewById(R.id.editText1);
    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {    
            pd = ProgressDialog.show(Main.this, "", "Downloading Data...", true, false);
            Log.d("asinc","inainte d downloadtask");
            // Start a new thread that will download all the data
            MyThread mThread = new MyThread();
            mThread.start();
            //parse();   
                 }
    });   

Ответы [ 2 ]

0 голосов
/ 06 октября 2011

Может быть, я что-то упускаю, но почему вы обращаетесь к компонентам пользовательского интерфейса из неосновного потока?Насколько я понимаю, пользовательский интерфейс не является потокобезопасным;и поэтому я бы предложил использовать AsyncTask вместо Thread.В этом случае вы можете поместить основной код обработки в метод doInBackground, а все компоненты пользовательского интерфейса - в onPostExecute (onPostExecute вызывается из основного потока после завершения выполнения задачи).

0 голосов
/ 06 октября 2011

попробуйте установить в своем основном классе в onCreate ()

private TextView tv; //declare as global so you can used into the subclass or into the methods

onCreate(){
   tv=(TextView) findViewById(R.id.textView5);
}

и затем используется в потоке

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