0

私が持っているサーバーから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"

しかし、画面に表示されるのは、サーバーからデータを読み取る前の値である「上書き」です。

理由はありますか?

アップデート

出力ソケットを閉じていたため、例外がスローされていました。現在、エラーは発生していませんが、取得した値は空です。理由はありますか?

新しいコード:

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;
}

}

4

1 に答える 1

1

はい。実行input.readLine();すると、処理して印刷した例外がスローされたに違いありません。の値は、GotBackで返される「OverWritten」になりましたreturn GotBack;

于 2013-03-31T19:54:28.243 に答える