2011-06-27 76 views
0

我有一个Android的意图发送到服务器的经度和纬度发送作为字符串这样安卓解析字符串为双

try { 
    Double X = loc.getLatitude(); 
    z = Double.toString(X); 
    Double Y = loc.getLongitude(); 
    z2 = Double.toString(Y); 

    outToServer.writeBytes(z); 
    outToServer.writeBytes(z2); 
} 
catch (IOException e1) { 
    e1.printStackTrace(); 
} 

然后经度和纬度发送和保存在服务器数据库比其他意图如何获取数据库并获取该字符串能够改变它的两倍

String x=inFromServer.readLine(); 
String y=inFromServer.readLine(); 

x = x.trim(); 
Double p1 = Double.parseDouble(x); 
y = y.trim(); 
Double p2 = Double.parseDouble(y); 

但是,强制关闭尽管当我使用同样的命令转换成字符串s =“12.23”什么都没有发生—没有强制关闭。 我怎样才能解决这个问题,在发送经纬度为双倍发送未知符号时考虑到这一点?

+0

'记录'双重价值,看看它是什么。如果它是一个真正的双倍,那么它不会失败。 – Haphazard

回答

1

当您将字节写入流中时,并未将它们写成两行。你把它们写成两个字节序列。然后当你阅读他们时,你正在阅读两行。如果没有换行符会怎样?另一件事,你可能不需要将它们转换为字符串。您应该能够通过流发送值作为其二进制表示。您应该了解主机和网络字节顺序之间的差异,但我实际上并不确定它如何与Java相关。

为什么不使用像JSON这样的数据交换格式,如果你打算把它们作为字符串发送出去呢?

无论如何,解决这个问题的便宜方法是在每条Double.toString()行的末尾添加一个换行符,因此当读取另一侧的数据时, ,而不是让你的第二行没有任何东西。

+0

z = Double.toString(X); String lone =(“\ n”); \t \t Double Y = loc.getLongitude(); \t z2 = Double.toString(Y); – gfgf

+0

你的意思是添加新行\ n? – gfgf

+0

@gfgf,由于您正在读取一行两次以获取值,因此您需要在流中的每一行之后都有一个换行符 –