【发布时间】:2017-05-02 10:49:04
【问题描述】:
您好,我正在编写一个本地托管的 Web 服务器,该服务器将在 Android 设备的 URL/URI 中发布纬度和经度,这将用作 SQL Select 查询中的搜索条件,以检索 5 个 clostes 火车站.
我已经使代码与硬编码的经度和纬度一起工作,但现在需要添加使用 Post/Get 函数从 adnroid 设备动态添加的功能,不幸的是我从未使用过 get/post 所以不要知道从哪里开始。
下面是我来自网络服务器中所有类的代码,正如所说的,它们都是硬编码的,但现在需要接受来自 android 设备的输入并返回相同的预期结果。谢谢
public class WebServer {
static String jArray = "";
public static void main(String[] args) {
try{
HttpServer server = HttpServer.create(new InetSocketAddress(8080),0);
server.createContext("/",new HttpHandler(){
public void handle(HttpExchange he) throws IOException{
try {
jArray = sqlConnector.train(jArray);
} catch (Throwable e) {
e.printStackTrace();
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(he.getResponseBody()));
System.out.println("Processing Request");
he.sendResponseHeaders(200, 0);
String output = "<html><head></head><body><p>" + jArray + "</p></body></html>";
bw.write(output);
bw.close();
}
});
server.start();
System.out.println("Started up . . .");
}
catch (IOException ioe){
System.err.println("problems Starting Webserver: " + ioe);
}
}
}
public class sqlConnector {
public static String train(String jArray) throws Exception{
PreparedStatement s = null;
try
{
Connection c = DriverManager.getConnection("jdbc:sqlite:C:/Users/Colin/trainstations.db");
s = c.prepareStatement("SELECT Latitude, Longitude, StationName,( 3959 * acos(cos(radians(53.4355)) * cos(radians(Latitude)) * cos(radians(Longitude) - radians(-3.0508)) + sin(radians(53.4355)) * sin(radians(Latitude )))) AS distance FROM stations ORDER BY distance ASC LIMIT 0,5;");
ResultSet rs = s.executeQuery();
jArray = jsonConverter.convertResultSetIntoJSON(rs, jArray);
}
catch (SQLException se)
{
se.printStackTrace();
}
return jArray;
}
}
public class jsonConverter {
public static String convertResultSetIntoJSON(ResultSet rs, String jArray) throws Exception {
JSONArray jsonArray = new JSONArray();
while (rs.next()) {
int total_rows = rs.getMetaData().getColumnCount();
JSONObject obj = new JSONObject();
for (int i = 0; i < total_rows; i++) {
String columnName = rs.getMetaData().getColumnLabel(i + 1).toString();
Object columnValue = rs.getObject(i + 1);
obj.put(columnName, columnValue);
}
jsonArray.put(obj);
}
jArray = jsonArray.toString();
return jArray;
}
}
我目前连接到另一个托管相同数据并且功能齐全的网络服务器,并且在端口号之后其格式如下
/stations?lat=" + lat + "&lng=" + lng);
lat 和 lng 是我使用 GPS 获取的变量
【问题讨论】:
标签: java android web-services sqlite restful-url