我目前已与某些中间件建立了连接,通过该连接我将 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;
}
}
最佳答案
将您的 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 String
是不可变的,因此每次重新创建 String
对象时,都会产生性能问题。因此StringBuffer
!
关于java - Android/Java - 将 DataInputStream 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15988859/