我正在制作这个 android applcation 并且有点卡住了一个问题。
问题是在我的应用程序中,一个 Activity 将用户当前位置发送到数据库,并且使用这个位置我引用数据库中的另一个表,我在其中获取这些值,该表包含其他用户的位置。
所以现在我想要做的是使用用户的当前位置并引用其他用户想要计算的位置,而不是选择最近的用户,我已经继续制作了一个 .php 文件。当在网络浏览器上运行时会显示正确的答案。但似乎在应用程序中不起作用。
请注意,php 文件 tat 使此计算使用 javascript。
这是我在我的异步任务中调用的 php 文件,它可以找到最近的用户。
php文件
<?php
$response = array();
include 'db_con.php';
// run query
$query = mysqli_query($con,"SELECT *FROM friend WHERE d_status='0'");
// look through query
if (!empty($query)) {
// check for empty result
$response["details"] = array();
while($row =mysqli_fetch_assoc($query)){
$details= array();
$details["Latitude"]= $row["d_latitude"];
$details["Longitude"]= $row["d_longitude"];
array_push($response["details"], $details);
}
}
// success
$response["success"] = 1;
// echoing JSON response
echo json_encode($response);
mysqli_close($con);
$lat=15.493403;
$longi=73.820617;
?>
<!DOCTYPE html>
<html>
<body>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2 /jquery.min.js"></script>
<script type="text/javascript">
var latlon = new Array();
var map;
var lat=15.493403;//"<?php echo $lat; ?>";
var longi=73.820617;//"<?php echo $longi; ?>";
var geocoder;
var origin =new google.maps.LatLng(lat,longi);
function mapLoad(){
var data="<?php echo $response;?>";
var data_parsed = JSON.parse(data);
var resp = data_parsed['details'];
for (var i in resp) {
latlon[i]=(resp[i].Latitude+","+resp[i].Longitude);
//alert("latit:"+latlon[i]);
}
calculateDistances();
}
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
function calculateDistances() {
var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix({
origins:[origin], //array of origins
destinations: latlon, //array of destinations
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, callback); //agettaxicoor
}
function callback(response, status) {
if (status != google.maps.DistanceMatrixStatus.OK) {
alert('Error was: ' + status);
} else {
//we only have one origin so there should only be one row
var routes = response.rows[0];
//need to find the shortest
var lowest = Number.POSITIVE_INFINITY;
var tmp;
var shortestRouteIdx;
var resultText = "Possible Routes: <br/>";
for (var i = routes.elements.length - 1; i >= 0; i--) {
tmp = routes.elements[i].duration.value;
resultText += "Route " + latlon[i] + ": " + tmp + "<br/>";
if (tmp < lowest) {
lowest = tmp;
shortestRouteIdx = i;
}
}
//log the routes and duration.
$('#results').html(resultText);
//get the shortest route
var shortestRoute = latlon[shortestRouteIdx];
var res = JSON.stringify(shortestRoute .split(","));
//alert(res);
location.href="atestb.php?Result=" + res; //this where the result is set.
}
}
</script>
<body onload="mapLoad();"></body>
</body>
</html>
但现在的问题是当我在 Eclipse 中使用调试工具时,我看到整个代码之后
文档类型 html
成为异步任务 json 调用的输出。
所以基本上我想要做的就是从应用程序调用这个 php 文件,它应该计算最近的用户并将最近用户的纬度和经度值返回到应用程序。也许通过更新相同的 php 文件变量或更新另一个 php 文件变量,如上例
我知道这可能不是正确的方法,所以任何帮助都会是gud。
最佳答案
您不能通过直接从 Android 源代码调用来执行 javascript。当您调用服务器时,它会返回一个内容流,就是这样!由于您的网络服务正在返回 javascript,因此 android 代码将 js 代码显示为字符串。
您应该将您的 js 逻辑转换为 php 并返回计算结果,或者在您的应用程序中使用能够执行 js 并将结果传递给您的 webview。你可以引用这个:How to execute JavaScript on Android?
编辑:有这个库在幕后创建一个 webview 并执行 javascript(注意:我自己没有测试过这个库)
https://github.com/evgenyneu/js-evaluator-for-android
关于javascript - 当从android调用带有一些js代码的php文件时,js代码就是这样调用的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23263823/