2013-03-31 56 views
0

想方設法讓Android設備從服務器獲取數據,我有:Android客戶端實施錯誤

RetreiveFeedTask DoStuff=new RetreiveFeedTask(); 
      try{ 
      Work=(DoStuff.execute(Exec)).get(); 
      } 
      catch(Exception e) 
      {System.out.print(e+"");} 

異步執行:

class RetreiveFeedTask extends AsyncTask<String , Void , String> { 

//private Exception e; 
String GotBack="empty"; 
@Override 
protected String doInBackground(String... params) { 

    try{ 
      Socket socket = new Socket("192.168.1.66", 2727); 
      OutputStream out = socket.getOutputStream();  
      PrintWriter output = new PrintWriter(out);  
      BufferedReader input=new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      output.println(params[0]); 
      output.flush(); 
      output.close(); 
      GotBack="OverWritten"; 
      GotBack=input.readLine(); 
      socket.close();             
      } 
     catch(Exception e){System.out.print(e+"");} 
    return GotBack; 
} 

}

我的服務器發送的ACK: 「1 \ n」

但是我在屏幕上得到的是「Overwrite」whic h是我從服務器讀取數據之前的值。

任何想法爲什麼?

更新

我關閉輸出插座於是有人拋出異常。現在我沒有得到錯誤,但我得到的價值是空的。任何想法爲什麼?

新代碼:

class RetreiveFeedTask extends AsyncTask<String , Void , String> { 

//private Exception e; 
String GotBack="empty"; 
@Override 
protected String doInBackground(String... params) { 

    try{ 
      Socket socket = new Socket("192.168.1.66", 2727); 
      OutputStream out = socket.getOutputStream();  
      PrintWriter output = new PrintWriter(out);  
      BufferedReader input=new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      output.println(params[0]); 
      output.flush(); 
      String read=""; 
      while((read=input.readLine())!=null) 
      { 
      GotBack+=read; 
      } 
      output.close(); 
      socket.close();             
      } 
     catch(Exception e){Log.e("MyApp","exception",e);} 
    return GotBack; 
} 

}

回答

1

是。執行input.readLine();必須拋出您處理和打印的異常。現在GotBack的值是「OverWritten」,它在return GotBack;上返回。

+0

是的。我在readline後放置GotBack =「覆蓋」,並返回「空」。但是,錯誤可能是? –