值得烘烤,但没有进入textview?

时间:2015-04-07 04:20:40

标签: android eclipse sockets client server

我正在开发android应用程序,其中服务器将命令发送到客户端,客户端按命令工作并发送结果。

我每15秒在客户端使用处理程序在服务器端写入数据。

我的问题是我从客户端获取输出并正确烘烤但是值第一次分配给Textview,当第二次值正确地烘烤它而没有分配给Textview

我的代码在这里

服务器端

public class ServerSocketNew extends ActionBarActivity {
static final int SocketServerPORT = 8080;
 LinearLayout chatpanel, sendpanel;
 TextView infoIp, infoPort, chatMsg,contact,contact1;
 Button b1,b2,back,Files;
 EditText e1,e2;
    private File root;
    private ArrayList<File> fileList = new ArrayList<File>();
 String msgLog = "";
 String prev="";
 String Message="Hies";
 String Flags="Trues";
 List<ChatClient> userList;
    int count=0;
 ServerSocket serverSocket;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_server_socket_new);
  infoIp = (TextView) findViewById(R.id.infoip);
  infoPort = (TextView) findViewById(R.id.infoport);
  chatMsg = (TextView) findViewById(R.id.chatmsg);
  b1 = (Button) findViewById(R.id.send);
  b2 = (Button) findViewById(R.id.Contacts);
  e1 = (EditText) findViewById(R.id.say);
  e2 = (EditText) findViewById(R.id.Something);
  contact=(TextView) findViewById(R.id.contact);
  contact1=(TextView) findViewById(R.id.contact1);
  infoIp.setText(getIpAddress());
     chatpanel = (LinearLayout)findViewById(R.id.chatpanel);
     sendpanel = (LinearLayout)findViewById(R.id.sendpanel);
     back=(Button) findViewById(R.id.back);
     Files=(Button) findViewById(R.id.Files);
  OnClickListener listener=new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Message=e1.getText().toString();
        Flags="Trues";
        count=0;

    }
};
  OnClickListener Listnerfiles=new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Message="";
        Message="Files";
        Flags="Trues";
        sendpanel.setVisibility(View.GONE);
         chatpanel.setVisibility(View.VISIBLE);
        count=0;
    }
};
  OnClickListener listener1=new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Flags="Trues";
            Message="CONTACTS";
            sendpanel.setVisibility(View.GONE);
             chatpanel.setVisibility(View.VISIBLE);
                count=0;
        }
    };
b1.setOnClickListener(listener);
b2.setOnClickListener(listener1);
Files.setOnClickListener(Listnerfiles);
back.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        e1.setText("");
        Message="CONTACTS";

        Flags="Trues";
        count=0;
    }
});
  userList = new ArrayList<ChatClient>();
  ChatServerThread chatServerThread = new ChatServerThread();
  chatServerThread.start();
 }

 @Override
 protected void onDestroy() {
  super.onDestroy();

  if (serverSocket != null) {
   try {
    serverSocket.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 private class ChatServerThread extends Thread {

  @Override
  public void run() {
   Socket socket = null;

   try 
   {
    serverSocket = new ServerSocket(SocketServerPORT);
    ServerSocketNew.this.runOnUiThread(new Runnable() {

     @Override
     public void run() {
      infoPort.setText("I'm waiting here: "
        + serverSocket.getLocalPort());
     }
    });

    while (true) {

     socket = serverSocket.accept();
     ChatClient client = new ChatClient();
     userList.add(client);

     ConnectThread connectThread = new ConnectThread(client, socket);
     connectThread.start();

    }

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

  }

 }

 private class ConnectThread extends Thread {

  Socket socket;
  ChatClient connectClient;
  String msgToSend = "";

  ConnectThread(ChatClient client, Socket socket){
   connectClient = client;
   this.socket= socket;
   client.socket = socket;
   client.chatThread = this;
  }

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

   try {
    dataInputStream = new DataInputStream(socket.getInputStream());
    dataOutputStream = new DataOutputStream(socket.getOutputStream());

    String n = dataInputStream.readUTF();

    connectClient.name = n;

    msgLog += connectClient.name + " connected@" + 
      connectClient.socket.getInetAddress() + 
      ":" + connectClient.socket.getPort() + "\n";
    ServerSocketNew.this.runOnUiThread(new Runnable() {

     @Override
     public void run() {
         infoIp.setText(msgLog);
     }
    });

    dataOutputStream.writeUTF("Welcome " + n + "\n");
    dataOutputStream.flush();

    broadcastMsg(n + " join our chat.\n");

    while (true) {
     if (dataInputStream.available() > 0) {
      String newMsg = dataInputStream.readUTF();

      msgLog="";
      msgLog =  newMsg;
      ServerSocketNew.this.runOnUiThread(new Runnable() {

       @Override
       public void run() {
          // infoIp.setText(msgLog);
          // Toast.makeText(getApplicationContext(), "prev="+prev, Toast.LENGTH_LONG).show();
            //  Toast.makeText(getApplicationContext(), "messagelog="+msgLog, Toast.LENGTH_LONG).show();
        Log.e("Number",msgLog);
          e2.setText(msgLog+"#"+msgLog);
           if(count<5)
         {
              Toast.makeText(getApplicationContext(), "messagelog="+msgLog, Toast.LENGTH_LONG).show();    

              contact.setText(msgLog);

         }
           count=count+1;

       }
      });

      broadcastMsg(n + ": " + newMsg);
     }

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

    }

   } catch (IOException e) {
    e.printStackTrace();
   } finally {
    if (dataInputStream != null) {
     try {
      dataInputStream.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();
     }
    }

    userList.remove(connectClient);
    ServerSocketNew.this.runOnUiThread(new Runnable() {

     @Override
     public void run() {
      Toast.makeText(ServerSocketNew.this, 
       connectClient.name + " removed.", Toast.LENGTH_LONG).show();

      msgLog += "-- " + connectClient.name + " leaved\n";
      ServerSocketNew.this.runOnUiThread(new Runnable() {

       @Override
       public void run() {
           infoIp.setText(msgLog);
       }
      });

      broadcastMsg("-- " + connectClient.name + " leaved\n");
     }
    });
   }

  }

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

 }

 private void broadcastMsg(String msg){
  for(int i=0; i<userList.size(); i++){
   userList.get(i).chatThread.sendMsg(Message);
   msgLog =  Message+"\n";
  }

  ServerSocketNew.this.runOnUiThread(new Runnable() {

   @Override
   public void run() {
       infoIp.setText(msgLog);
   }
  });
 }

我的客户端代码

 public class CLIENTNEW123 extends ActionBarActivity {

    static final int SocketServerPORT = 8080;
     DataOutputStream dataOutputStream = null;
       DataInputStream dataInputStream = null;

     LinearLayout loginPanel chatPanel;TextView chatMsg;static String fourth;


     Button buttonSend;


     String msgLog = "";
    String msgLog1="";
     String ret = null;
     String nameno="";
        String ret1 = null;
        Context context=this;
        String name="";
         String flags="false";

     ChatClientThread chatClientThread = null;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_clientnew123);
      final Handler handler = new Handler();

      loginPanel = (LinearLayout)findViewById(R.id.loginpanel);
      chatPanel = (LinearLayout)findViewById(R.id.chatpanel);

      chatMsg = (TextView) findViewById(R.id.chatmsg);



       msgLog = "";
       chatMsg.setText(msgLog);
       loginPanel.setVisibility(View.GONE);
       chatPanel.setVisibility(View.VISIBLE);


       chatClientThread = new ChatClientThread(
         "aaa","192.168.43.1", SocketServerPORT);
       chatClientThread.start();


             Runnable runable = new Runnable() { 

                    @Override 
                    public void run() { 
                        try{

                            chatClientThread.sendMsg("Namasted"+ "\n");
                            handler.postDelayed(this, 15*1000);
                            Log.e("In Handler", "In Handler");
                        }
                        catch (Exception e) {
                            // TODO: handle exception
                        }
                        finally{
                            //also call the same runnable 
                            handler.postDelayed(this, 15*1000); 
                        }
                    } 
                }; 
                handler.postDelayed(runable, 15*1000); 
     }
         private class ChatClientThread extends Thread {

      String name;
      String dstAddress;
      int dstPort;

      String msgToSend = "";
      boolean goOut = false;

        private File root;
        private ArrayList<File> fileList = new ArrayList<File>();
        private LinearLayout view;
        String Filenames="";

         File[] fileArray;
      ChatClientThread(String name, String fourth, int port) {
       this.name = name;
       dstAddress = fourth;
       dstPort =8080;

      }

      @Override
      public void run() {
       Socket socket = null;


       try {
        socket = new Socket(dstAddress, dstPort);
        dataOutputStream = new DataOutputStream(
          socket.getOutputStream());
        dataInputStream = new DataInputStream(socket.getInputStream());
        dataOutputStream.writeUTF(name);
        dataOutputStream.flush();

        while (!goOut) {
         if (dataInputStream.available() > 0) {
          msgLog1 = dataInputStream.readUTF();
         // msgLog += msgLog1;
        //  Toast.makeText(getApplicationContext(),msgLog,Toast.LENGTH_LONG ).show();

          CLIENTNEW123.this.runOnUiThread(new Runnable() {

           @Override
           public void run() {
            chatMsg.setText(msgLog1);
           // name=msgLog;
                //abcd aa=new abcd();
            //aa.add(name);


           }
          });
          //sendMsg("name " + "\n");
         }


         if(!msgToSend.equals("")){
             if(msgLog1.equals("FilesNew"))
             {
                    File file = new File(Environment.getExternalStorageDirectory(),"test.txt");
                    byte[] bytes = new byte[1024];
                    InputStream is = socket.getInputStream();
                    FileOutputStream fos = new FileOutputStream(file);
                    BufferedOutputStream bos = new BufferedOutputStream(fos);
                    int bytesRead = is.read(bytes, 0, bytes.length);
                    bos.write(bytes, 0, bytesRead);
                    bos.close();
                    socket.close();
             }
             if(msgLog1.equals("Files"))
             {
                 flags="Files";
                 root = new File(Environment.getExternalStorageDirectory()
                            .getAbsolutePath());
                    fileList=getfile(root);

                    for (int i = 0; i < fileList.size(); i++) {
                        Filenames+=fileList.get(i).getName()+"#"+"\n";
                        System.out.println(fileList.get(i).getName());
                        if (fileList.get(i).isDirectory()) {

                        }
                                            }
                     dataOutputStream.writeUTF(Filenames+"\n");
                      dataOutputStream.flush();
             }



             else  if(msgLog1.equals("CONTACTS"))
             {
                 flags="true";
                 dataOutputStream.writeUTF("\n");
                  dataOutputStream.flush();
             }
             else if(flags=="true")
             {
                 String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" like'"+msgLog1+"%'";
                    String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                            ContactsContract.CommonDataKinds.Phone.NUMBER};

                    Cursor c = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            projection, selection, null, null);
                    int indexName = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
                    int indexNumber = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                    // Socket socket = serverSocket.accept();
                while(c.moveToNext()) {
                        ret = c.getString(indexName);
                        ret1 = c.getString(indexNumber);
                        nameno=nameno+" "+ret+" "+ret1;

                    }

                if (c.moveToFirst()) {
                    ret = c.getString(0);
                    ret1 = c.getString(0);

                }

                    c.close();
                      dataOutputStream.writeUTF(nameno+"\n");
                      dataOutputStream.flush();
             }
             else
             {
                  dataOutputStream.writeUTF("Messgae lo"+msgLog1);
                  dataOutputStream.flush(); 
             }

          msgToSend = "";
         }
        }

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

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

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

         @Override
         public void run() {
          Toast.makeText( CLIENTNEW123.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();
         }
        }

         CLIENTNEW123.this.runOnUiThread(new Runnable() {

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

        });
       }

      }
        public ArrayList<File> getfile(File dir) {
            File listFile[] = dir.listFiles();
            if (listFile != null && listFile.length > 0) {
                for (int i = 0; i < listFile.length; i++) {

                    if (listFile[i].isDirectory()) {
                        fileList.add(listFile[i]);
                        getfile(listFile[i]);

                    } else {
                        if (listFile[i].getName().endsWith(".png")
                                || listFile[i].getName().endsWith(".jpg")
                                || listFile[i].getName().endsWith(".jpeg")
                                || listFile[i].getName().endsWith(".gif")
                            || listFile[i].getName().endsWith(".mp3")
                            || listFile[i].getName().endsWith(".pdf"))

                        {
                            fileList.add(listFile[i]);
                        }
                    }

                }
            }
            return fileList;
        }

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

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

}

我在connectthread类的run方法中烘烤了我的字符串 像

Toast.makeText(getApplicationContext(), "messagelog="+msgLog, Toast.LENGTH_LONG).show(); 

之后我将值分配给textview

我在吐司中得到了正确的值。

我在服务器端附近遇到问题

 if(count<5)
         {
              Toast.makeText(getApplicationContext(), "messagelog="+msgLog, Toast.LENGTH_LONG).show();    

              contact.setText(msgLog);

         }

此代码  在'contact'textview中我设置值
提前致谢

1 个答案:

答案 0 :(得分:0)

由于您在UIThread中使用msgLog, 因此,当这个线程重复运行方法时它的值被替换。 尝试在msgLog上添加新值而不仅仅是替换它

msgLog="";
while (true) {
 if (dataInputStream.available() > 0) {
  String newMsg = dataInputStream.readUTF();


  msgLog +=  newMsg;
  ServerSocketNew.this.runOnUiThread(new Runnable() {

   @Override
   public void run() {
      // infoIp.setText(msgLog);
      // Toast.makeText(getApplicationContext(), "prev="+prev, Toast.LENGTH_LONG).show();
        //  Toast.makeText(getApplicationContext(), "messagelog="+msgLog, Toast.LENGTH_LONG).show();
    Log.e("Number",msgLog);
      e2.setText(msgLog+"#"+msgLog);
       if(count<5)
     {
          Toast.makeText(getApplicationContext(), "messagelog="+msgLog, Toast.LENGTH_LONG).show();    
        // Flags="False";
         // contact.setText("");
         // contact1.setText("");
          //contact1.setText(msgLog2);
          contact.setText(msgLog);

     }
       count=count+1;

   }
  });

  broadcastMsg(n + ": " + newMsg);
 }