принудительное закрытие при попытке вызвать класс, который реализует поток клиента - PullRequest
0 голосов
/ 15 апреля 2011

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

Вот как я вызываю клиентский класс в первом действии моего приложения:

Thread cThread=new Thread(new ClientThread());
cThread.start(); 

и вот мой класс клиента:

public class ClientThread implements Runnable{
    private Handler handler=new Handler();
    Socket  socket;
    private TextView clientState;
    public void run()
    {
        try
        {
            InetAddress serverAddr=InetAddress.getByName("10.0.2.2");
            handler.post(new Runnable(){
                public void run(){
                    clientState.setText(" try to connect!");
                }
            });
        socket=new Socket(serverAddr, 8080);

            //connected=true;
        handler.post(new Runnable(){
                public void run(){
                    clientState.setText("Connected!");
                }
            });

        }
        catch(Exception e){
            handler.post(new Runnable(){
                public void run(){
                    clientState.setText("Error");
                    }
            });

            e.printStackTrace();
        }

    }

      protected void onStop() {
            super.onStop();
            try {
                 // make sure you close the socket upon exiting
                //out.close();
                 socket.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
        }

}

Может кто-нибудь сказать, что не так или, по крайней мере, дать мне идею.Одна вещь, которую я должен сказать, это то, что мой клиент работает нормально - он подключается к серверу, когда класс клиента интегрирован в мою первую деятельность (я имею в виду, что изначально у меня не было класса клиента, все было в первой операции ... и этоработал нормально).Я здесь для более подробной информации!Спасибо заранее!

1 Ответ

1 голос
/ 15 апреля 2011

Без трассировки стека это выглядит как сбой, потому что вы не инициализировали просмотр текста.

package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroid extends Activity {
    TextView tv;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView)findViewById(R.id.mytextview);
    }

    public class ClientThread extends Thread {
    ...// Do NOT init textview
    }
}
...