我使用谷歌距离矩阵api从以下方式获得两个地理点的最短距离:
public class BarCodeScanner extends Activity {
private EditText contentTxt;
private EditText contentTxt2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bar_code_scanner);
contentTxt = (EditText) findViewById(R.id.scan_content);
contentTxt2 = (EditText) findViewById(R.id.scan_content2);
}
public void openScanner1 (View view) {
IntentIntegrator scanIntegrator = new IntentIntegrator (this);
scanIntegrator.initiateScan();
startActivityForResult(scanIntegrator, 1);
}
public void openScanner2 (View view) {
IntentIntegrator scanIntegrator = new IntentIntegrator(this);
scanIntegrator.initiateScan();
startActivityForResult(scanIntegrator, 2);
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (requestCode == 1&& resultCode == RESULT_OK) {
String scanContent = scanningResult.getContents();
contentTxt.setText(scanContent);
}
else if (requestCode == 2&& resultCode == RESULT_OK){
String scanContent = scanningResult.getContents();
contentTxt2.setText(scanContent);
}
else{
Toast toast = Toast.makeText(getApplicationContext(),
"No scan data received!", Toast.LENGTH_SHORT);
toast.show();
}
}
在这段代码中,我已成功获得最短距离。但是我需要在调用方法 calculateDistances()时返回值,而不是提醒值。我怎么能用回调方法!。
答案 0 :(得分:2)
距离矩阵服务是异步,因此,您需要传递callback
方法以在请求完成时执行,以处理结果。但您可以考虑将异步API转换为 promises 。
以下示例演示了如何使用jQuery将Distance Matrix服务API转换为promises:
var origin1 = new google.maps.LatLng(9.6667, 80.0000);
var destinationA = new google.maps.LatLng(9.6689, 80.0059);
function calculateDistances(origins,destinations) {
var service = new google.maps.DistanceMatrixService();
var d = $.Deferred();
service.getDistanceMatrix(
{
origins: origins,
destinations: destinations,
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
},
function(response, status){
if (status != google.maps.DistanceMatrixStatus.OK) {
d.reject(status);
} else {
d.resolve(response);
}
});
return d.promise();
}
calculateDistances([origin1],[destinationA])
.done(function(response){
var origins = response.originAddresses;
for (var i = 0; i < origins.length; i++) {
var results = response.rows[i].elements;
for (var j = 0; j < results.length; j++) {
//console.log(results[j].distance.text);
document.getElementById('result').innerHTML += results[j].distance.text;
}
}
})
.fail(function(status){
document.getElementById('result').innerHTML = 'An error occured. Status: ' + status;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?signed_in=true"></script>
<div id='result'/>
答案 1 :(得分:1)
我将数组作为全局变量,包含元素数量和全局变量。然后,在回调中,我将增加元素的数量,并将当前数组元素设置为距离。
希望这能回答你的问题。祝你好运!