在AsyncTask中通过套接字接收两个不同的数组

时间:2015-08-17 16:46:40

标签: java sockets android-asynctask

我有一个用于小型多人游戏的Java服务器。通过连接的套接字,我想在关键字更新到达时向我的客户端发送两个不同的数组。

output.reset();
output.writeObject(array1);
output.writeObject(array2);

其中array1为 int [16] ,array2为 int [2] [2]

在Android客户端中,我有两个 AsyncTask来捕获数组。

@Override
protected int[] doInBackground(ObjectInputStream...params) {
    ObjectInputStream ois = params[0];

            try {
                arrayFromServer = (int[]) (ois.readObject());
            } catch (ClassNotFoundException | IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   

        return arrayFromServer;
}

@Override
protected int[][] doInBackground(ObjectInputStream... params) {
    ObjectInputStream ois = params[0];

        try {
            complexArrayFromServer = (int[][]) (ois.readObject());
        } catch (ClassNotFoundException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    return complexArrayFromServer;
}

我正在将它们传递给我的UI活动,其中的计时器每20秒发送一次关键字更新

    public void startTimer() {
    timer = new Timer();
    initializeTimerTask();
    timer.schedule(timerTask, 5000, 20000); 
}

public void initializeTimerTask() {

    timerTask = new TimerTask() {
        public void run() {

            handler.post(new Runnable() {
                public void run() {

                    //AsyncTask
                    new CardTask() {

                        @Override
                        public void onPostExecute(int[] result) {
                            mFromServer = result;
                        }
                    }.execute(ois);

                    //AsyncTask
                    new PointsAndCardsTask() {

                        @Override
                        public void onPostExecute(int[][] result) {
                            mComplexArray = result;

                        }
                    }.execute(ois);
                }
            });
        }
    };
}

但是这给我的游戏带来了一些问题,我很想知道我在发送数组时是否做错了什么,或者有更好的方法吗?

我得到的错误是

08-17 15:39:57.196: E/AndroidRuntime(665): FATAL EXCEPTION: main
08-17 15:39:57.196: E/AndroidRuntime(665): java.lang.ArrayIndexOutOfBoundsException

因为在期待一个阵列时我会得到另一个阵列。

1 个答案:

答案 0 :(得分:0)

我无法解释在Java(de-)序列化这些数组时在Java中发生了什么,但是我确信Java不能在数组之间产生差异,以便您可以&# 39;确保只获得具有所需尺寸的数组。

我会封装您在不同Java对象中发送的数据。通过这样做,您可以使用instance of来确保您只获得您想要的东西!