如何使用String在客户端显示图像,字符串是发送服务器?

时间:2015-04-19 06:22:27

标签: android

我的服务器向我的客户端发送字符串消息,客户端读取字符串 字符串消息已成功发送,然后此字符串用于图像识别。

我已完成此任务的编码,但我无法运行它。

这是我的班级:

  private class ChatClientThread extends Thread {

    String name;
    String dstAddress;
    int dstPort;

    String msgToSend = "";
    boolean goOut = false;

    ChatClientThread(String name, String address, int port) {
        this.name = name;
        dstAddress = address;
        dstPort = port;
    }

    @Override
    public void run() {
        Socket socket = null;
        DataOutputStream dataOutputStream = null;
        DataInputStream dataInputStream = null;

        try {
            socket = new Socket(dstAddress, dstPort);
            dataOutputStream = new DataOutputStream(
            socket.getOutputStream());
            dataInputStream = new DataInputStream(socket.getInputStream());
            dataOutputStream.writeUTF(name);
            dataOutputStream.flush();
            int counter = 0;
            while (!goOut) {
                if (dataInputStream.available() > 0) {
                    msgLog += dataInputStream.readUTF();
                    // start editing
                    String[] separated = msgLog.split("\\,");

                    for (int i = 2; i < separated.length - 1; i += 2) {
                        String symbol = separated[i];
                        String num = separated[i + 1];
                        String resourceName = symbol + num;
                        int resID = getResources().getIdentifier(resourceName, "id", getPackageName());
                        ImageView im = (ImageView) findViewById(resID);
                        Context context = im.getContext();
                        int id = context.getResources().getIdentifier(resourceName, "drawable", context.getPackageName());
                        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(im.getLayoutParams());
                        //43,0,0,0


                        lp.setMargins(counter * 65, 24, 40, 5); //left,right,top,bottom
                        im.setLayoutParams(lp);
                        im.setImageResource(id);
                        // im.setOnClickListener(this);
                        counter++;
                    }


                    /* MainActivity.this.runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                chatMsg.setText(msgLog);
                            }
                        });*/
                }

                if (!msgToSend.equals("")) {
                    dataOutputStream.writeUTF(msgToSend);
                    dataOutputStream.flush();
                    msgToSend = "";
                }
            }

        } catch (UnknownHostException e) {
            e.printStackTrace();
            final String eString = e.toString();
            MainActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, eString, Toast.LENGTH_LONG).show();
                }

            });
        } catch (IOException e) {
            e.printStackTrace();
            final String eString = e.toString();
            MainActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, eString, Toast.LENGTH_LONG).show();
                }

            });
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (dataOutputStream != null) {
                try {
                    dataOutputStream.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (dataInputStream != null) {
                try {
                    dataInputStream.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            MainActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    loginPanel.setVisibility(View.VISIBLE);
                    chatPanel.setVisibility(View.GONE);
                }

            });
        }

    }

    private void sendMsg(String msg) {
        msgToSend = msg;
    }

    private void disconnect() {
        goOut = true;
    }
  }

  }

1 个答案:

答案 0 :(得分:0)

在这个多线程概念中。这是每个图像的显示

MainActivity.this.runOnUiThread(new Runnable() {

             @Override
              public void run() {
                         drawCards(msgLog);
                                                 }
                         });

private void drawCards(String drawString){
        String[] separated = msgLog.split("\\,");

        for (int i = 2; i < separated.length - 1; i += 2) {


            String symbol = separated[i];
            String num = separated[i + 1];
            String resourceName = symbol + num;

            int resID = getResources().getIdentifier(resourceName, "id", getPackageName());
            im = (ImageView) findViewById(resID);
            Context context = im.getContext();
            cardID = context.getResources().getIdentifier(resourceName, "drawable", context.getPackageName());

                    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(im.getLayoutParams());
                    lp.setMargins(counter*39, 0, 0, 0);//left,right,top,bottom
                    im.setLayoutParams(lp);
                    im.setImageResource(cardID);



            //im.setOnClickListener(this);

            counter++;
            if(i>6) {
                //break;
            }
        }
        counterOfLoop.setText(counter+"");
    }