ToD_o 2013-08-06 23:52 采纳率: 0%
浏览 1319

android写个注册程序时报java.io.StreamCorruptedException

求大神帮忙看一看,困了好久了,还是解决不了,先上点代码
public void onClick(View v) {
if (!userpassword1.getText().toString()
.equals(userpassword2.getText().toString())) {

            Toast.makeText(RegActivity.this, "密码不一致!", Toast.LENGTH_LONG)
                    .show();

            return;
        }
        Socket socket = null;
        try {
            socket = new Socket(Tools.IP, Tools.PORT_1);
            ObjectOutputStream oout = new ObjectOutputStream(
                    socket.getOutputStream());
            ObjectInputStream oin = new ObjectInputStream(
                    socket.getInputStream());

            Message m1 = new Message();
            Hashtable table = new Hashtable();
            table.put("userid", useridText.getText().toString());

            if (manb.isChecked()) {
                table.put("sex", "男");
            } else {

                table.put("sex", "女");
            }

            table.put("username", usernameText.getText().toString());
            table.put("age", userageText.getText().toString());
            table.put("userpassword", userpassword1.getText().toString());
            m1.setValue(table);
            m1.setType(m1.REG);

            oout.writeObject(m1);
            oout.flush();
            m1 = (Message) oin.readObject();
            if (m1.getReturnValue().get("message").toString()
                    .equalsIgnoreCase("ok")) {

                AlertDialog.Builder bb = new AlertDialog.Builder(
                        RegActivity.this);
                bb.setTitle("恭喜您,注册成功!");
                bb.setMessage("您的ID是:" + m1.getReturnValue().get("userid"));
                final String userid = m1.getReturnValue().get("userid")
                        .toString();

                bb.setNeutralButton("马上登录",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                Intent in = new Intent();
                                in.setClass(RegActivity.this,
                                        LoginActivity.class);
                                in.putExtra("userid", userid);
                                startActivity(in);
                                RegActivity.this.finish();

                            }
                        });

                bb.setNegativeButton("退出",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {

                                System.exit(0);

                            }
                        });
                bb.create().show();

            } else {
                Toast.makeText(
                        RegActivity.this,
                        "注册失败!"
                                + m1.getReturnValue().get("message")
                                        .toString(), Toast.LENGTH_LONG)
                        .show();
            }

        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(RegActivity.this, "网络不通!"+e.getMessage(), Toast.LENGTH_LONG)
                    .show();

        } finally {
            try {
                socket.close();
            } catch (IOException e) {
            }
        }
    }

在try...catch那捕捉的异常是null;
不知道是不是自己写的服务器的问题,还是软件中的代码错误
报的警告是
java.io.StreamCorruptedException
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1700)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
at com.erhuo.login.RegActivity$SubmitButtonOnClickListener.onClick(RegActivity.java:88)这里对应的那一行是 m1 = (Message) oin.readObject();

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-11 15:02
    关注

    java.io.StreamCorruptedException异常通常是在读取或写入对象流时发生的,表示在反序列化对象时出现了格式不正确的数据或者不能识别的数据。


    在你的代码中,你使用了ObjectOutputStream和ObjectInputStream来进行对象序列化和反序列化。你需要确认你的服务器端的代码和客户端的代码是否完全一致,以及你的Message类是否正确实现了Serializable接口。 这样你就可以在客户端和服务器端之间正确地传输对象。


    另外,你的异常捕获中出现了一个null,这可能是你在创建Socket对象时发生了异常,导致无法正确创建该对象。你应该在try块中打印详细的异常信息,并检查在创建Socket对象时是否出现了问题。

    评论

报告相同问题?

悬赏问题

  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条