2012-11-25 56 views
0

我的客戶端首先發送給客戶端併成功從服務器讀取確認。當我再次發送按鈕時,它會寫入服務器,但無法再次讀取。Android Socket in.ReadLine()

繼承人我的代碼:

注:DOIT變量表明,按下按鈕,然後它可以追溯到0,直到用戶再次點擊按鈕。

while (connected) { 
       try { 
        Log.d("ClientActivity", "C: Sending command."); 

        b.setOnClickListener(new View.OnClickListener() { 

         public void onClick(View v) { 
          // TODO Auto-generated method stub 

         doit=1; 
         Log.e("ErrorButton","NextTime "+doit); 
         } 
        }); 
        if(doit==1) 
        { 
         Log.e("ErrorButton","If"); 
        //// 
         out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));     

        out.println("Helloo"); 

        while ((text = in.readLine()) != null) { 
         finall += text; 
         Log.e("Test","Final: "+finall); 
         if(text=="quit") 
         { 
          socket.close(); 
         } 
        Log.e("ClientActivity", "After Read "+doit+" "+finall); 
       // in.close(); 

        doit=0; 
        Log.e("ClientActivity", "After If "+doit); 
        } 

        }  



       } catch (Exception e) { 
        Log.e("ClientActivity", "S: Error", e); 
       } 

      } 

回答

1

因爲,我覺得你的插座沒有關閉,

看看你的代碼行,你如果條件是錯誤

if(text=="quit") 

它應該是,

if(text.equals("quit")) 

要比較字符串,請始終使用來自Java String Class的3210或equlaIgnoreCase()方法。

也從while()循環中移出按鈕的onClickListener()

每次它都會爲導致問題的每次迭代創建一個New Listener Object for Button。

b.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
    doit=1; 
    Log.e("ErrorButton","NextTime "+doit); 
    } 
}); 
在活動的 onCreate()

1

不要每次在循環周圍創建新的流。爲套接字的生命創建一次。您正在通過創建新的流而丟棄流中的緩衝數據。

+0

非常感謝。我只注意到它 –