2014-04-24 15 views
7

Tôi amd làm cho android applcation và am kinda bị mắc kẹt với một vấn đề. vấn đề là trong ứng dụng của tôi, một hoạt động gửi vị trí hiện tại của người dùng đến cơ sở dữ liệu và sử dụng vị trí này tôi tham khảo một bảng khác trong cơ sở dữ liệu. vì vậy bây giờ những gì tôi muốn làm là sử dụng vị trí hiện tại của người dùng và giới thiệu vị trí người dùng khác muốn tính toán và hơn chọn người dùng gần nhất, tôi đã tiếp tục và tạo tệp .php. và khi chạy trên trình duyệt web cho tôi thấy ans chính xác. nhưng dường như không hoạt động trong ứng dụng. nhớ bạn tập tin php làm cho tính toán này sử dụng một javascript. đây là tệp php mà tôi gọi trong tác vụ không đồng bộ của tôi, tìm thấy người dùng gần nhất. file phpkhi gọi một tập tin php với một số mã js từ android, mã js là đầu ra của một cuộc gọi như vậy

<?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> 

nhưng vấn đề bây giờ là khi tôi sử dụng công cụ gỡ lỗi trong nhật thực tôi thấy rằng toàn bộ mã sau

DOCTYPE html

trở thành đầu ra của cuộc gọi json không đồng bộ.

vì vậy về cơ bản tất cả những gì tôi muốn làm là gọi tập tin php này từ ứng dụng, nó sẽ tính toán người dùng gần nhất và trả lại giá trị vĩ độ và kinh độ của người dùng gần nhất với application.maybe bằng cách cập nhật cùng một php tập tin biến hoặc cập nhật một biến tập tin php như trường hợp trên tôi biết điều này có thể không phải là cách chính xác để làm điều này, vì vậy bất kỳ trợ giúp sẽ là gud.

+0

tôi có thể hỏi tại sao bạn sử dụng PHP? Plus, tôi nghĩ bạn không thể chạy PHP trên Android. Bạn cần cài đặt apache + php, đó là lý do tại sao nó hoạt động trên máy tính chứ không phải android. Nếu bạn muốn sử dụng một tập tin php, hãy đặt nó trên một máy chủ, sau đó yêu cầu nó từ ứng dụng của bạn, sử dụng ajax. (mã IE trong ứng dụng android không có nghĩa là bất cứ điều gì) – Larta

+0

xin lỗi không đề cập đến nó, nhưng tập tin này là trên máy chủ. –

Trả lời

1

Bạn không thể thực thi javascript bằng cách gọi trực tiếp từ mã nguồn Android của bạn. Khi bạn thực hiện cuộc gọi đến máy chủ, nó sẽ trả về một luồng nội dung, đó là nó! Vì dịch vụ web của bạn trả về javascript, mã android sẽ hiển thị mã js như thể đó là một chuỗi.

Bạn nên chuyển đổi logic js thành php và trả về kết quả tính toán hoặc sử dụng chế độ xem web trong ứng dụng của bạn để có thể thực thi js và chuyển cho bạn kết quả. Bạn có thể tham khảo ý kiến ​​này: How to execute JavaScript on Android?

Edit: Có thư viện này tạo ra một webview đằng sau hậu trường và thực thi javascript (lưu ý: tôi đã không kiểm tra thư viện bản thân mình)

https://github.com/evgenyneu/js-evaluator-for-android

Các vấn đề liên quan