2014-04-24 6 views
7

Zrobiłem tę aplikację Android i jestem trochę utknął z problemem. Chodzi o to, że w mojej aplikacji jedno działanie wysyła użytkownikom bieżącą lokalizację do bazy danych, a przy użyciu tej właśnie lokalizacji odsyłam kolejną tabelę w bazie danych, gdzie pobierane są te wartości, gdzie ta tabela składa się z lokalizacji innych użytkowników. , więc teraz, co chcę zrobić, to używać aktualnej lokalizacji użytkowników i kierując lokalizację innych użytkowników, którzy chcą obliczyć, a następnie wybrać najbliższego użytkownika, zrobiłem plik .php. a kiedy uruchomię przeglądarkę internetową, pokazuje mi poprawne ans. ale nie działa w aplikacji. Pamiętaj, że tat pliku php sprawia, że ​​ten komputer używa javascript. to jest plik php, który wywołuję w moim asynchronicznym zadaniu, które znajduje najbliższego użytkownika. plik phppodczas wywoływania pliku php z jakimś kodem js z androida, kod js jest wynikiem takiego wywołania

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

ale teraz problem jest podczas korzystania z narzędzia do debugowania w Eclipse widzę, że cały kod po

DOCTYPE html

staje się wyjściem wywołania asynchronicznego wywołania json.

więc w zasadzie wszystko, co chcę zrobić, to wywołać ten plik php z aplikacji, powinien obliczyć najbliższego użytkownika i zwrócić wartość szerokości i długości geograficznej najbliższego użytkownika aplikacji. Może to być aktualizacja tego samego php Zmienna pliku lub aktualizacja innej zmiennej pliku php, jak powyższy przypadek Wiem, że to może nie być właściwy sposób, aby to zrobić, więc każda pomoc będzie gud.

+0

mogę zapytać, dlaczego używasz PHP? Plus, myślę, że nie można uruchomić PHP na Androida. Potrzebujesz apache + php, dlatego działa na komputerze, a nie na Androidzie. Jeśli chcesz użyć pliku php, umieść go na serwerze, a następnie poproś o niego z aplikacji za pomocą ajax. (Kod IE w aplikacji na Androida nic nie znaczy) – Larta

+0

Niestety nie wspominam o tym, ale ten plik znajduje się na serwerze. –

Odpowiedz

1

Nie można wykonać javascript, dzwoniąc bezpośrednio z kodu źródłowego Androida. Kiedy wykonujesz połączenie z serwerem, zwraca strumień treści, to wszystko! Ponieważ twoja usługa sieciowa zwraca javascript, kod android pokazuje kod js tak, jakby był ciągiem znaków.

Powinieneś przekonwertować logikę js na php i zwrócić obliczony wynik lub użyć widoku internetowego w swojej aplikacji, który byłby w stanie wykonać js i przekazać ci wynik. Można skonsultować to: How to execute JavaScript on Android?

Edit: Jest to biblioteka, która tworzy webview za kulisy i wykonuje javascript (uwaga: nie testowałem biblioteki siebie)

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

Powiązane problemy