2011-06-27 84 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,由於您正在讀取一行兩次以獲取值,因此您需要在流中的每一行之後都有一個換行符 –