2014-09-04 58 views
0

我很抱歉發佈這樣的「noob問題」,但我無法自己解決我的問題。 我有一個服務器端腳本,用PHP編寫,它返回不同的值,在這個例子中存儲在MySQL DB中的所有公司名稱。編碼麻煩:php api和java客戶端程序

在DB

-The柱中被編碼的UTF-8 -The php文件被編碼以UTF-8

這是服務器端腳本:

include_once( 'SQLHandler.php') ; $ SQLHandler = new SQLHandler();

if(isset($_POST['command'])){ 
    $command = $_POST['command']; 
    switch($command){ 

    case 'getCompanies': 
     echo utf8_encode('[["Test1"],["Test2"],["Test3"],["Test4"]]'); 
     //echo json_encode($SQLHandler -> getCompanies()); 
    break; 

    } 
} 

它返回 「[[」 測試1 「],[」 的Test2 「],[」 Test3的 「],[」 TEST4 「]]」。

然而,當我想分析返回的字符串,並將其解析到一個數組(使用JSON-簡單庫),會出現以下情況:

?[["Test1"],["Test2"],["Test3"],["Test4"]] 
Unexpected token END OF FILE at position 0. 

Java代碼如下:

ArrayList companies = new ArrayList <>();

try { 
     URL url = new URL("http://localhost/api.php"); 
     URLConnection conn = url.openConnection(); 

     conn.setDoInput(true); 
     conn.setDoOutput(true); 
     conn.setUseCaches(false); 
     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

     DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 
     String content = "command=getCompanies"; 

     out.writeBytes(content); 
     out.flush(); 
     out.close(); 

     InputStream is = conn.getInputStream(); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); 

     String line; 
     while ((line = rd.readLine()) != null){ 
      System.out.println(line); 
     } 

     String jsonText = readAll(rd); 
     is.close(); 
     JSONArray array = (JSONArray) new JSONParser().parse(jsonText); 
     System.out.println(array); 
     System.out.println(array.toJSONString()); 
     System.out.println(array.toString()); 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return null; 

這是我第一次使用Java和JSON工作,所以它是可能的,我做了一個很容易找到的錯誤,但我會非常心存感激,如果你能指出來,我(和解釋什麼我做錯了;))

問候

回答

0

嘛,原來這不是一個編碼的問題在所有... 見我修改後的代碼:

ArrayList的公司=新的ArrayList <>() ;

try { 
     URL url = new URL("http://localhost/api.php"); 
     URLConnection conn = url.openConnection(); 

     conn.setDoInput(true); 
     conn.setDoOutput(true); 
     conn.setUseCaches(false); 
     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

     DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 
     String content = "command=getCompanies"; 

     out.writeBytes(content); 
     out.flush(); 
     out.close(); 

     InputStream is = conn.getInputStream(); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); 

     String wholeLine = ""; 
     String line; 
     while ((line = rd.readLine()) != null) { 
      wholeLine = wholeLine + line; 
     } 

     is.close(); 
     JSONArray array = (JSONArray) new JSONParser().parse(wholeLine); 

     for(Object obj : array.toArray()){ 
      System.out.println(obj.toString()); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 

我忘了提供「線」來解析功能,而是解析錯誤的變量^^ 問候