【问题标题】:Android / Java - Converting DataInputStream into StringAndroid / Java - 将 DataInputStream 转换为字符串
【发布时间】:2013-04-13 14:29:02
【问题描述】:

我目前与一些中间件建立了连接,通过它我将 SQL 查询发送到数据库。

我在将 DataInputStream 转换为可用格式(无论是否为字符串)时遇到了一些问题。我查看了another StackOverflow question,但这并没有解决我的问题,因为使用

in.readLine();

已“弃用”,无论这意味着什么。我需要能够从我的中间件读取响应。

private class NetworkTask extends AsyncTask<String, Void, Integer> 
{
    protected Integer doInBackground(String... params)
    {
        Message message = networkHandler.obtainMessage();

        String ip = "example ip";
        int port = 1234;

        try 
        {
            InetAddress serverAddr = InetAddress.getByName(ip);
            Log.d("EventBooker", "C: Connecting...");
            Socket socket = new Socket(serverAddr, port);               

            DataInputStream in = new DataInputStream(socket.getInputStream());


            try 
            {
                Log.d("EventBooker", "C: Connected. Sending command.");
                PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                out.println(params[0]);
                networkHandler.sendMessage(message);
                Log.d("EventBooker", "C: Sent.");
            } 
            catch (Exception e) 
            {
                Log.e("EventBooker", "S: Error", e);
            }
            Log.d("EventBooker", "C: Reading...");



            Log.d("EventBooker", "C: Response read, closing.");
            socket.close();
            Log.d("Eventbooker", "C: Closed.");
        } 
        catch (Exception e)
        {
            Log.e("EventBooker", "C: Error", e);
        }
        return 1;
    }
}

【问题讨论】:

  • @Rotemmiz - 我之前也试过这个,但没有运气。 IOUtils不能在Android中使用吗? Eclipse 不喜欢我使用 IOUtils。

标签: java android string datainputstream


【解决方案1】:

将您的DataInputStream 转换为BufferedReaderStream,如下所示:

BufferedReader d = new BufferedReader(new InputStreamReader(in));

然后你想得到你的实际String,你可以这样做:

StringBuffer sb = new StringBuffer();
String s = "";

while((s = d.readLine()) != null) {
    sb.append(s);
}

String data = sb.toString();

//Use data for w/e

简单易行!

我们不只是将它附加到已经存在的字符串的原因是 Java Strings 是不可变的,因此每次重新创建 String 对象时,都会产生性能问题。因此StringBuffer!

【讨论】:

  • 我之前试过这个,但我得到了这个响应:1)字符串无法解析为变量。 2) 标记“s”的语法错误,删除此标记。 3) 类型不匹配:无法从字符串转换为布尔值。 4) 类型不匹配:无法从布尔值转换为字符串
  • 此外,Eclipse 提供的唯一快速修复是在我们已有的“!= null”之后添加另一个“!= null”。
  • 天哪,对不起...检查修订版它不是另一个字符串...我的错,喝了一杯酒...
  • 我知道,我自己删除了它,但我仍然遇到同样的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 2018-11-05
  • 1970-01-01
  • 2023-03-17
  • 2013-01-29
  • 2011-01-08
相关资源
最近更新 更多