2012-07-19 69 views
1

行,所以我做这个代码的简单PC,Android的服务器 - 客户端应用程序:Android客户端查杀连接

package org.smiley.doom; 

import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 

import java.net.InetAddress; 
import java.net.Socket; 
import java.net.UnknownHostException; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class ClientActivity extends Activity implements View.OnClickListener{ 

public static ImageView im; 
public static Socket s; 
public static boolean go; 
public static TextView log; 
Button send; 
EditText tip; 
InetAddress inet; 
int rport; 
String ip; 
ObjectOutputStream out; 
ObjectInputStream in; 

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

    tip = (EditText) findViewById(R.id.etIP); 
    send = (Button) findViewById(R.id.bSEND); 
    im = (ImageView) findViewById(R.id.ivPIC); 
    log = (TextView) findViewById(R.id.tvLog); 

    s = null; 
    in = null; 
    out = null; 

    send.setOnClickListener(this); 
} 

@Override 
public void onClick(View arg0) { 
    switch(arg0.getId()){ 
     case R.id.bSEND: 
      byte[] b; 
      int len; 
       try { 
        inet = InetAddress.getByName("192.168.0.2"); 
        s = new Socket(inet, 4321); 
        out = new ObjectOutputStream(s.getOutputStream()); 
        in = new ObjectInputStream(s.getInputStream()); 
        log.setText("Client opened"); 
        len = in.readInt(); 
        b = new byte[len]; 
        in.read(b); 
        log.setText(b.length); 
        out.writeBoolean(true); 
        out.close(); 
        in.close(); 
        s.close(); 
        System.out.println("Client closed"); 
       } catch (UnknownHostException e) { 
        log.setText(e.getMessage().toString()); 
       } catch (IOException e) { 
        log.setText(e.getMessage().toString()); 
       } 
     break; 
    } 
} 
} 

但由于某些原因,跑的时候,它会连接到服务器,然后坠毁根本没有改变我的文本视图日志,我知道它与服务器没有问题,因为我几乎有一个正常的Java项目上运行的完全相同的代码,它完美地连接起来。这个问题似乎是当它试图设置对象输出/输入流(因为这是所有发生在日志更新和客户端请求连接之间的所有事情),但我无法弄清楚为什么我的生活

一如既往任何帮助表示赞赏:)

编辑:我的继承人logcat的

07-20 14:17:22.374: W/ResourceType(335): No package identifier when getting value for resource number 0x000096ce 
07-20 14:17:22.374: D/AndroidRuntime(335): Shutting down VM 
07-20 14:17:22.374: W/dalvikvm(335): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
07-20 14:17:22.385: E/AndroidRuntime(335): FATAL EXCEPTION: main 
07-20 14:17:22.385: E/AndroidRuntime(335): android.content.res.Resources$NotFoundException: 
String resource ID #0x96ce 
07-20 14:17:22.385: E/AndroidRuntime(335): at android.content.res.Resources.getText(Resources.java:201) 
07-20 14:17:22.385: E/AndroidRuntime(335): at android.widget.TextView.setText(TextView.java:2857) 
07-20 14:17:22.385: E/AndroidRuntime(335): at 
org.smiley.doom.ClientActivity.onClick(ClientActivity.java:65) 
07-20 14:17:22.385: E/AndroidRuntime(335): at android.view.View.performClick(View.java:2485) 
07-20 14:17:22.385: E/AndroidRuntime(335): at android.view.View$PerformClick.run(View.java:9080) 
07-20 14:17:22.385: E/AndroidRuntime(335): at android.os.Handler.handleCallback(Handler.java:587) 
07-20 14:17:22.385: E/AndroidRuntime(335): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-20 14:17:22.385: E/AndroidRuntime(335): at android.os.Looper.loop(Looper.java:123) 
07-20 14:17:22.385: E/AndroidRuntime(335): at android.app.ActivityThread.main(ActivityThread.java:3683) 
07-20 14:17:22.385: E/AndroidRuntime(335): at java.lang.reflect.Method.invokeNative(Native Method) 
07-20 14:17:22.385: E/AndroidRuntime(335): at java.lang.reflect.Method.invoke(Method.java:507) 
07-20 14:17:22.385: E/AndroidRuntime(335): at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
07-20 14:17:22.385: E/AndroidRuntime(335): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
07-20 14:17:22.385: E/AndroidRuntime(335): at dalvik.system.NativeStart.main(Native Method) 
+1

请发表您的logcat的输出。我感觉你遇到了NetworkOnMainThreadException,因为你没有在后台线程上执行你的网络I/O。 – twaddington 2012-07-19 21:27:53

+0

它不能是我正在运行姜饼 – MrFuzzles 2012-07-21 22:39:21

回答

1

你得到一个ResourcesNotFoundException因为你引用的资源之一不能在你的XML解决。首先尝试在Eclipse中清理你的项目。您可以通过转到“项目 - >清洁”来确保清理正确的项目。最后,请确保您的main.xml布局文件可以通过您正在测试的Android版本访问。您可以将它放在设备无法访问的合格目录中(例如xlarge布局目录)。

下面是相关的错误:与堆栈跟踪

android.content.res.Resources$NotFoundException: 
[ ... ] 
at org.smiley.doom.ClientActivity.onClick(ClientActivity.java:65) 
[ ... ] 
+0

你先生是上帝,我试图清理我的项目之前没有成功,我检查,以确保我的android sdk是我开发的sdk,它是。但我从来没有注意到logcat的“ClientActivity.java:65”部分,所以我检查了出来 - 事​​实证明,我试图设置我的日志文本视图的文本(字符串)的字节数读取(整数)这是为什么字符串资源没有找到... – MrFuzzles 2012-07-21 23:25:04

+1

啊,是的,这样做。 'String.valueOf(...)'是你的朋友。 – twaddington 2012-07-22 23:28:38