Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android/Java-将DataInputStream转换为字符串_Java_Android_String_Datainputstream - Fatal编程技术网

Android/Java-将DataInputStream转换为字符串

Android/Java-将DataInputStream转换为字符串,java,android,string,datainputstream,Java,Android,String,Datainputstream,我目前与一些中间件建立了连接,通过它我向数据库发送SQL查询 我在将DataInputStream转换为可用格式(无论是否为字符串)时遇到一些问题。我看了一下,但是这并没有解决我使用后的问题 in.readLine(); 是“不推荐的”,不管那是什么意思。我需要能够从我的中间件读取响应 private class NetworkTask extends AsyncTask<String, Void, Integer> { protected Integer doInBac

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

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

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;
    }
}
私有类NetworkTask扩展了AsyncTask
{
受保护的整数doInBackground(字符串…参数)
{
Message Message=networkHandler.obtainMessage();
String ip=“示例ip”;
int端口=1234;
尝试
{
inetAddressServerAddr=InetAddress.getByName(ip);
Log.d(“EventBooker”,“C:连接…”);
套接字=新的套接字(serverAddr,端口);
DataInputStream in=新的DataInputStream(socket.getInputStream());
尝试
{
Log.d(“EventBooker”,“C:已连接。正在发送命令”);
PrintWriter out=新的PrintWriter(新的BufferedWriter(新的OutputStreamWriter(socket.getOutputStream()),true);
out.println(参数[0]);
networkHandler.sendMessage(消息);
Log.d(“EventBooker”,“C:Sent.”);
} 
捕获(例外e)
{
Log.e(“EventBooker”,“S:Error”,e);
}
Log.d(“EventBooker”,“C:Reading…”);
Log.d(“EventBooker”,“C:响应读取,关闭”);
socket.close();
Log.d(“Eventbooker”,“C:Closed.”);
} 
捕获(例外e)
{
Log.e(“EventBooker”,“C:错误”,e);
}
返回1;
}
}

数据输入流
转换为
缓冲读取器流
,如下所示:

BufferedReader d = new BufferedReader(new InputStreamReader(in));
StringBuffer sb = new StringBuffer();
String s = "";

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

String data = sb.toString();

//Use data for w/e
然后,您需要获取实际的
字符串
,要执行此操作,请执行以下操作:

BufferedReader d = new BufferedReader(new InputStreamReader(in));
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

试试这个:@Rotemmiz-我之前也试过,运气不好。IOUtils不能在Android中使用吗?Eclipse不喜欢我使用IOUtils。我之前尝试过这个,但得到的响应是:1)字符串无法解析为变量。2) 令牌“s”上出现语法错误,请删除此令牌。3) 类型不匹配:无法从字符串转换为布尔值。4) 类型不匹配:无法从布尔值转换为字符串另外,Eclipse提供的唯一快速修复方法是在已有的“!=null”之后添加另一个“!=null”。天哪,对不起。。。检查修订版本,它不是s上的另一个字符串。。。糟糕的是,我喝了一杯酒……我知道,我自己把它去掉了,但我还是犯了同样的错误。