Java 通过客户端中的套接字将对象转换为数组

Java 通过客户端中的套接字将对象转换为数组,java,android,sockets,Java,Android,Sockets,我正在为一个游戏构建一个Android客户端,它连接到一个Java服务器上。我在服务器上有这个代码 for (int i = 0; i < diceRolled.length; i++) { diceRolled[i] = (int) ( 1 + Math.random() * 6); } List<int[]> dice = Arrays.asList(diceRolled); output.writeObject(dice); 但它不起作用。我的错

我正在为一个游戏构建一个Android客户端,它连接到一个Java服务器上。我在服务器上有这个代码

for (int i = 0; i < diceRolled.length; i++) {
            diceRolled[i] = (int) ( 1 + Math.random() * 6);
}
List<int[]> dice = Arrays.asList(diceRolled);
output.writeObject(dice);
但它不起作用。我的错误在哪里

编辑: LOGCAT日志

05-19 15:15:18.030: E/AndroidRuntime(1155): FATAL EXCEPTION: main
05-19 15:15:18.030: E/AndroidRuntime(1155): android.os.NetworkOnMainThreadException
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at libcore.io.IoBridge.recvfrom(IoBridge.java:503)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at libcore.io.Streams.readFully(Streams.java:81)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.io.DataInputStream.readShort(DataInputStream.java:169)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2098)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at com.android.pickominoclient.GameActivity$1.onClick(GameActivity.java:65)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.view.View.performClick(View.java:3511)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.view.View$PerformClick.run(View.java:14105)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.os.Handler.handleCallback(Handler.java:605)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.os.Looper.loop(Looper.java:137)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.app.ActivityThread.main(ActivityThread.java:4424)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.lang.reflect.Method.invokeNative(Native Method)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.lang.reflect.Method.invoke(Method.java:511)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at dalvik.system.NativeStart.main(Native Method)
05-19 15:15:18.030:E/AndroidRuntime(1155):致命异常:主
05-19 15:15:18.030:E/AndroidRuntime(1155):android.os.NetworkOnMainThreadException
05-19 15:15:18.030:E/AndroidRuntime(1155):在android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
05-19 15:15:18.030:E/AndroidRuntime(1155):在libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
05-19 15:15:18.030:E/AndroidRuntime(1155):位于libcore.io.IoBridge.recvfrom(IoBridge.java:503)
05-19 15:15:18.030:E/AndroidRuntime(1155):在java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
05-19 15:15:18.030:E/AndroidRuntime(1155):在java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
05-19 15:15:18.030:E/AndroidRuntime(1155):在java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
05-19 15:15:18.030:E/AndroidRuntime(1155):在libcore.io.Streams.readFully(Streams.java:81)中
05-19 15:15:18.030:E/AndroidRuntime(1155):在java.io.DataInputStream.readShort(DataInputStream.java:169)处
05-19 15:15:18.030:E/AndroidRuntime(1155):位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2098)
05-19 15:15:18.030:E/AndroidRuntime(1155):位于java.io.ObjectInputStream。(ObjectInputStream.java:372)
05-19 15:15:18.030:E/AndroidRuntime(1155):在com.android.pickominoclient.GameActivity$1.onClick(GameActivity.java:65)
05-19 15:15:18.030:E/AndroidRuntime(1155):在android.view.view.performClick(view.java:3511)上
05-19 15:15:18.030:E/AndroidRuntime(1155):在android.view.view$PerformClick.run(view.java:14105)
05-19 15:15:18.030:E/AndroidRuntime(1155):在android.os.Handler.handleCallback(Handler.java:605)上
05-19 15:15:18.030:E/AndroidRuntime(1155):在android.os.Handler.dispatchMessage(Handler.java:92)上
05-19 15:15:18.030:E/AndroidRuntime(1155):在android.os.Looper.loop(Looper.java:137)上
05-19 15:15:18.030:E/AndroidRuntime(1155):位于android.app.ActivityThread.main(ActivityThread.java:4424)
05-19 15:15:18.030:E/AndroidRuntime(1155):位于java.lang.reflect.Method.Invokenactive(本机方法)
05-19 15:15:18.030:E/AndroidRuntime(1155):在java.lang.reflect.Method.invoke(Method.java:511)
05-19 15:15:18.030:E/AndroidRuntime(1155):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-19 15:15:18.030:E/AndroidRuntime(1155):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-19 15:15:18.030:E/AndroidRuntime(1155):在dalvik.system.NativeStart.main(本地方法)
服务器发送
List dice=Arrays.asList(掷骰子)

应用程序正在尝试“重建”
int[]myDice=(int[])what.readObject()


您应该将列表转换为非数组

我们是否可以查看错误日志或是什么使其“不工作”?乍一看,您正在通过套接字发送一个java.util.List,并试图以int[]的形式读取该对象,但由于它们是不同的,因此无法工作objects@RyanS日志已发布。另外,我恐怕您对我试图读取的int[]的看法是正确的,但我需要将对象转换为数组。有没有其他方法可以在没有这些转换的情况下发送/接收它?数组=>列表=>对象?我也必须这样做,反向,进入客户端?你应该能够直接发送数组。数组是java中的对象,只要底层类型(本例中为int)可以序列化,就可以使用ObjectOutputStream发送数组。你不应该做任何包装或包装converting@RyanS是的,我使用的是ObjectOutputStream,它是输出,你可以在我的代码中看到,但我不知道我可以通过转换发送它。谢谢我现在正在尝试。你有没有用谷歌搜索过例外情况?它清楚地表明:当您在主线程上尝试网络操作时抛出。您应该使用异步任务。这是对已经公布的答案的补充。
05-19 15:15:18.030: E/AndroidRuntime(1155): FATAL EXCEPTION: main
05-19 15:15:18.030: E/AndroidRuntime(1155): android.os.NetworkOnMainThreadException
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at libcore.io.IoBridge.recvfrom(IoBridge.java:503)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at libcore.io.Streams.readFully(Streams.java:81)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.io.DataInputStream.readShort(DataInputStream.java:169)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2098)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at com.android.pickominoclient.GameActivity$1.onClick(GameActivity.java:65)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.view.View.performClick(View.java:3511)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.view.View$PerformClick.run(View.java:14105)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.os.Handler.handleCallback(Handler.java:605)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.os.Looper.loop(Looper.java:137)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at android.app.ActivityThread.main(ActivityThread.java:4424)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.lang.reflect.Method.invokeNative(Native Method)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at java.lang.reflect.Method.invoke(Method.java:511)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-19 15:15:18.030: E/AndroidRuntime(1155):     at dalvik.system.NativeStart.main(Native Method)