2012-07-19 65 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