2011-12-17 124 views
5

我目前正在尝试开发一个应用程序,其中包括可以发送和接收来自MySQL服务器的数据。从MySQL获取数据到Android与PHP

该应用程序调用一个php脚本,它使连接到mysql服务器。我已经成功开发了发送部分,现在我想从mysql中检索数据并将其显示在android手机上。

MySQL表由5列组成:

  • bssid
  • building
  • floor
  • lon
  • lat

PHP文件getdata.php包含:

 <?php 
    $con = mysql_connect("localhost","root","xxx"); 
    if(!$con) 
    { 
     echo 'Not connected'; 
     echo ' - '; 

    }else 
    { 
    echo 'Connection Established'; 
    echo ' - '; 
    } 

    $db = mysql_select_db("android"); 
    if(!$db) 
    { 
     echo 'No database selected'; 
    }else 
    { 
     echo 'Database selected'; 
    } 
    $sql = mysql_query("SELECT building,floor,lon,lat FROM ap_location WHERE bssid='00:19:07:8e:f7:b0'"); 

    while($row=mysql_fetch_assoc($sql)) 
    $output[]=$row; 
    print(json_encode($output)); 

     mysql_close(); ?> 

这部分工作正常,在浏览器中测试时。

用于连接到PHP中的Java代码:

public class Database { 
     public static Object[] getData(){ 
    String db_url = "http://xx.xx.xx.xx/getdata.php"; 
    InputStream is = null; 
    String line = null; 
    ArrayList<NameValuePair> request = new ArrayList<NameValuePair>(); 
    request.add(new BasicNameValuePair("bssid",bssid)); 
    Object returnValue[] = new Object[4]; 
    try 
    { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpContext localContext = new BasicHttpContext(); 
     HttpPost httppost = new HttpPost(db_url); 
     httppost.setEntity(new UrlEncodedFormEntity(request)); 
     HttpResponse response = httpclient.execute(httppost, localContext); 
     HttpEntity entity = response.getEntity(); 
     is = entity.getContent(); 
    }catch(Exception e){ 
     Log.e("log_tag", "Error in http connection" +e.toString()); 
    } 
    String result = ""; 
    try 
    { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
     StringBuilder sb = new StringBuilder(); 

     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     result=sb.toString(); 
    }catch(Exception e){ 
     Log.e("log_tag", "Error in http connection" +e.toString()); 
    } 
    try 
    { 
     JSONArray jArray = new JSONArray(result); 
     JSONObject json_data = jArray.getJSONObject(0); 
     returnValue[0] = (json_data.getString("building")); 
     returnValue[1] = (json_data.getString("floor")); 
     returnValue[2] = (json_data.getString("lon")); 
     returnValue[3] = (json_data.getString("lat")); 

    }catch(JSONException e){ 
     Log.e("log_tag", "Error parsing data" +e.toString()); 
    } 
    return returnValue; 
} 

}

这是用于将数据发送到MySQL服务器,修改代码,但什么是错的。 我试图通过在代码中设置不同的returnValue来测试它,这说明带有httpclient连接的部件不运行。

你们能帮我吗?

我希望这不是太困扰,如果你想,我可以试着解释一下。

+0

BUMP测试。我需要进一步解释我的问题吗? – freddy 2011-12-20 23:44:06

+0

我测试了代码,它适用于我。 – 2011-12-22 02:02:57

+0

您是否已将此权限添加到清单文件中? '<使用权限android:name =“android.permission.INTERNET”/>''' – Hovo 2014-12-19 02:28:50

回答

1

使用HttpGet代替HttpPost并解析你的url。

0

这是一类,我总是用得到

public JSONObject get(String urlString){  
    URL currentUrl; 
    try { 
     currentUrl = new URL(currentUrlString); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
     return null; 
    } 

    HttpURLConnection urlConnection = null; 
    InputStream in; 
    BufferedReader streamReader = null; 
    StringBuilder responseStrBuilder = new StringBuilder(); 
    String inputStr; 
    try { 
     urlConnection = (HttpURLConnection) currentUrl.openConnection();    
     in = new BufferedInputStream(urlConnection.getInputStream()); 
     streamReader = new BufferedReader(new InputStreamReader(in, "UTF-8")); 
     while ((inputStr = streamReader.readLine()) != null) { 
      responseStrBuilder.append(inputStr); 
     } 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     urlConnection.disconnect(); 
     if(null != streamReader){ 
      try { 
       streamReader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    try { 
     return new JSONObject(responseStrBuilder.toString()); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

尝试get("http://echo.jsontest.com/key/value");