Java 谁来解释一下错误

Java 谁来解释一下错误,java,android,android-emulator,Java,Android,Android Emulator,我是android编程新手。我一直在尝试在两个模拟器之间建立连接。当我的服务器模拟器启动并运行时,客户端出现问题。这是代码和logcat错误描述。请告诉我其中的错误 public class SocketClient extends Activity { private Button bt; private TextView tv; private Socket socket; private String serverIpAddress = "192.168.0.5

我是android编程新手。我一直在尝试在两个模拟器之间建立连接。当我的服务器模拟器启动并运行时,客户端出现问题。这是代码和logcat错误描述。请告诉我其中的错误

public class SocketClient extends Activity 
{

   private Button bt;
   private TextView tv;
   private Socket socket;
   private String serverIpAddress = "192.168.0.5";
   private static final int REDIRECTED_SERVERPORT = 5000;
   public void connect()
   {
   try 
   {
         InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
         tv.setText((CharSequence) serverAddr);
         socket = new Socket(serverAddr, REDIRECTED_SERVERPORT);
    }
    catch (UnknownHostException e1) 
    {
         e1.printStackTrace();
         System.out.println("Here");
    }
    catch (IOException e1)
    {
         e1.printStackTrace();
         System.out.println("Here too");
    }
    }


   @Override
    public void onCreate(Bundle savedInstanceState)
    {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  bt = (Button) findViewById(R.id.myButton);
  tv = (TextView) findViewById(R.id.myTextView);
  connect();
  bt.setOnClickListener(new OnClickListener()
  {
     public void onClick(View v)
     {
        try 
        {
           EditText et = (EditText) findViewById(R.id.EditText01);
           String str = et.getText().toString();
           PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
           out.println(str);
           Log.d("Client", "Client sent message");
        }
        catch (UnknownHostException e) 
        {
           tv.setText("Error1");
           e.printStackTrace();
        }
        catch (IOException e) 
        {
           tv.setText("Error2");
           e.printStackTrace();
        }
        catch (Exception e) 
        {
           tv.setText("Error3");
           e.printStackTrace();
        }
     }
  }
  );
 }
}
logcat错误为

01-31 04:42:51.170: W/dalvikvm(529): threadid=1: thread exiting with uncaught exception           (group=0x409c01f8)
01-31 04:42:51.187: E/AndroidRuntime(529): FATAL EXCEPTION: main
01-31 04:42:51.187: E/AndroidRuntime(529): java.lang.RuntimeException: Unable to start     activity ComponentInfo{com.app.ServerClient/com.app.ServerClient.SocketClient}:   java.lang.ClassCastException: java.net.Inet4Address cannot be cast to java.lang.CharSequence
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.os.Looper.loop(Looper.java:137)
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.app.ActivityThread.main(ActivityThread.java:4424)
01-31 04:42:51.187: E/AndroidRuntime(529):  at java.lang.reflect.Method.invokeNative(Native Method)
01-31 04:42:51.187: E/AndroidRuntime(529):  at java.lang.reflect.Method.invoke(Method.java:511)
01-31 04:42:51.187: E/AndroidRuntime(529):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-31 04:42:51.187: E/AndroidRuntime(529):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-31 04:42:51.187: E/AndroidRuntime(529):  at dalvik.system.NativeStart.main(Native Method)
01-31 04:42:51.187: E/AndroidRuntime(529): Caused by: java.lang.ClassCastException: java.net.Inet4Address cannot be cast to java.lang.CharSequence
01-31 04:42:51.187: E/AndroidRuntime(529):  at com.app.ServerClient.SocketClient.connect(SocketClient.java:25)
01-31 04:42:51.187: E/AndroidRuntime(529):  at com.app.ServerClient.SocketClient.onCreate(SocketClient.java:48)
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.app.Activity.performCreate(Activity.java:4465)
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-31 04:42:51.187: E/AndroidRuntime(529):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
01-31 04:42:51.187: E/AndroidRuntime(529):  ... 11 more
提前谢谢


谢谢大卫和吉坦德拉

我纠正了错误,在代码的一部分中得到了nullPointerException。我做错了什么

public void onClick(View v)
     {
        try                                                      // The error is in                this block
        {
           EditText et = (EditText) findViewById(R.id.EditText01);
           String str = et.getText().toString();
           PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
           out.println(str);
           Log.d("Client", "Client sent message");
        }
        catch (UnknownHostException e) 
        {
           tv.setText("Error1");
           e.printStackTrace();
        }
        catch (IOException e) 
        {
           tv.setText("Error2");
           e.printStackTrace();
        }
        catch (Exception f)                 // I get the error here. java.lang.NullPointerException
        {
           tv.setText("Error3");
           tv.setText(f.toString());
           f.printStackTrace();
        }

     }

您的错误在这一行:

tv.setText((CharSequence) serverAddr);
serverAddr
的类型为
InetAddress
,您试图将其强制转换为无法执行的
CharSequence
。也许你的意思是:

tv.setText(serverIpAddress);

您的错误在这一行:

tv.setText((CharSequence) serverAddr);
serverAddr
的类型为
InetAddress
,您试图将其强制转换为无法执行的
CharSequence
。也许你的意思是:

tv.setText(serverIpAddress);

例外情况如下所示:

tv.setText((CharSequence) serverAddr);
这是因为您试图将serverAddr强制转换为CharSequence

如果您真的想打印serverAddr,请使用

tv.setText((CharSequence) serverAddr.toString());

例外情况如下所示:

tv.setText((CharSequence) serverAddr);
这是因为您试图将serverAddr强制转换为CharSequence

如果您真的想打印serverAddr,请使用

tv.setText((CharSequence) serverAddr.toString());

您应该在onCreate()之后放置connect()@himanshu:
connect
是从
onCreate
调用的。类中方法的顺序对执行顺序没有影响。您应该在onCreate()之后放置connect()@himanshu:
connect
是从
onCreate
调用的。类中方法的顺序对执行顺序没有影响。