- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我正在尝试实现 http://developer.android.com/reference/android/location/Location.html#distanceBetween(double 中的 distanceBetween 方法。 、 double 、 double 、 double 、 float [])。
我是编码新手,所以我相信我让这件事变得比应有的困难,但我不确定为什么。我试图获取该 JSON 对象并从 FIeld1(呼号)、Field2(频率)、Field21(纬度)、Field24(纬度)获取信息。然后我想运行 distanceBetween 来查明它是否在 350 KM 的半径范围内。有人可以帮我一些提示或代码吗?谢谢!
这是我更新的 MainActivity.java
package com.dredaydesigns.radiostationfinder;
import android.R;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks {
public static final String TAG = MainActivity.class.getSimpleName();
private RadioData mRadioData;
private GoogleApiClient mGoogleApiClient;
private Location mLastLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_content);
ButterKnife.bind(this);
Location locationUserLatitude = mLastLocation;
Location locationUserLongitude = mLastLocation;
Location latitudeStation;
Location longitudeStation;
RadioData mRadioData = new RadioData();
OkHttpClient client = new OkHttpClient();
String radioFinderURL = "http://dredaycreative.com/json/radioData.json";
Request request = new Request.Builder()
.url(radioFinderURL)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
try {
String jsonData = response.body().string();
Log.v(TAG, jsonData);
if (response.isSuccessful()) {
getCurrentRadioData(jsonData);
}
} catch (IOException e) {
Log.e(TAG, "Exception Caught: ", e);
} catch (JSONException e) {
Log.e(TAG, "Exception Caught:", e);
}
}
});
}
private List getCurrentRadioData(String jsonData) throws JSONException{
List radioData = new ArrayList<String>();
Object obj=JSONValue.parse(jsonData);
JSONArray data;
data = (JSONArray)obj;
for (int i=0; i<data.length(); i++) {
JSONObject jasonObj = data.getJSONObject(i);
if (Location.distanceBetween() <= 350) {
float[] results = new float[3];
Location.distanceBetween(mLastLocation.getLatitude(), mLastLocation.getLongitude(), latitudeStation, longitudeStation, results);
float distance = results[0];
JSONObject callsign = jasonObj.getJSONObject("FIELD1");
radioData.add(callsign);
JSONObject frequency = jasonObj.getJSONObject("FIELD2");
radioData.add(frequency);
double latitudeStations = jasonObj.getDouble("FIELD21");
radioData.add(latitudeStations);
double longitudeStations = jasonObj.getDouble("FIELD24");
radioData.add(longitudeStations);
} else {
}
}
return radioData;
}
private void updateDisplay() {
mLatitudeLabel.setText(String.valueOf(mLastLocation.getLatitude()));
mLongitudeLabel.setText(String.valueOf(mLastLocation.getLongitude()));
}
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener((GoogleApiClient.OnConnectionFailedListener) this)
.addApi(LocationServices.API)
.build();
}
@Override
public void onConnected(Bundle bundle) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
// mLatitudeLabel.setText(String.valueOf(mLastLocation.getLatitude()+ ""));
// mLongitudeLabel.setText(String.valueOf(mLastLocation.getLongitude()+""));
}
}
@Override
public void onConnectionSuspended(int i) {
}
}
这是我从 github 上的某人那里获取的 jsonValue.java
package com.dredaydesigns.radiostationfinder;
/*
* $Id: JSONValue.java,v 1.1 2006/04/15 14:37:04 platform Exp $
* Created on 2006-4-15
*/
import org.json.simple.parser.JSONParser;
import java.io.Reader;
import java.io.StringReader;
/**
* @author FangYidong<fangyidong@yahoo.com.cn>
*/
public class JSONValue {
/**
* parse into java object from input source.
* @param in
* @return instance of : JSONObject,JSONArray,String,Boolean,Long,Double or null
*/
public static Object parse(Reader in){
try{
JSONParser parser=new JSONParser();
return parser.parse(in);
}
catch(Exception e){
return null;
}
}
public static Object parse(String s){
StringReader in=new StringReader(s);
return parse(in);
}
}
这是 XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:background="#ffffed">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/latitudeLabel"
android:layout_alignParentTop="true"
android:layout_marginTop="49dp"
android:layout_centerHorizontal="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/longitudeLabel"
android:layout_below="@+id/latitudeLabel"
android:layout_marginTop="72dp"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
这是 RadioData.java 的 getter 和 setter...我是根据从 teamtreehouse 学到的知识将我自己的这个项目拼凑在一起的,所以如果它非常俗气,请道歉。
package com.dredaydesigns.radiostationfinder;
/**
* Created by Andreas on 8/10/2015.
*/
public class RadioData {
public String getCallSign() {
return mCallsign;
}
public void setCallSign(String callsign) {
mCallsign = callsign;
}
public double getFrequency() {
return mFrequency;
}
public void setFrequency(double frequency) {
mFrequency = frequency;
}
public int getChannel() {
return mChannel;
}
public void setChannel(int channel) {
mChannel = channel;
}
public double getLatitude() {
return mLatitude;
}
public void setLatitude(double latitude) {
mLatitude = latitude;
}
public double getLongitude() {
return mLongitude;
}
public void setLongitude(double longitude) {
mLongitude = longitude;
}
private String mCallsign;
private double mFrequency;
private int mChannel;
private double mLatitude;
private double mLongitude;
}
根据用户的建议,我现在已将 MainActivity 代码的这一部分更改为以下内容,但似乎在某些地方仍然有问题,我需要帮助,谢谢!我的 gradle 构建得很好,但我无法让 genymotion 工作,所以我不知道什么在工作,什么在不工作!如果这部分工作正常,我的下一步就是向用户显示 localRadioData :D:
private List getCurrentRadioData() throws JSONException{
List radioData = new ArrayList<String>();
List localRadioData = new ArrayList();
Object obj=JSONValue.parse(String.valueOf(radioData));
JSONArray data;
data = (JSONArray)obj;
float[] results = new float[3];
double latitudeStation = 0;
double longitudeStation = 0;
for (int i=0; i<data.length(); i++) {
JSONObject jasonObj = data.getJSONObject(i);
double latitudeStations = jasonObj.getDouble("FIELD21");
radioData.add(latitudeStations);
double longitudeStations = jasonObj.getDouble("FIELD24");
radioData.add(longitudeStations);
Location.distanceBetween(mLastLocation.getLatitude(), mLastLocation.getLongitude(), latitudeStation, longitudeStation, results);
float distance = results[0];
distance = Math.round(distance);
if ((distance) > 350) {
JSONObject callsign = jasonObj.getJSONObject("FIELD1");
localRadioData.add(callsign);
JSONObject frequency = jasonObj.getJSONObject("FIELD2");
localRadioData.add(frequency);
} else {
radioData.add(getCurrentRadioData());
}
}
return localRadioData;
}
最佳答案
distanceBetween 是 Location 类的静态函数,这意味着您可以通过执行以下操作来简单地调用它:
float[] results = new float[3];
Location.distanceBetween(startLat, startLong, endLat, endLong, results);
float distance = results[0];
就如何在代码中实现它而言,它可能看起来像这样:
float[] results = new float[3];
Location.distanceBetween(mLastLocation.getLatitude(), mLastLocation.getLongitude(), latitudeStation, longitudeStation, results);
float distance = results[0];
我希望这有帮助:)
关于java - 如何修复 Android 的 distanceBetween 方法语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597669/
当我在 Google 中搜索类加罗尔到孟买之间的距离时,distancebetween.com 出现在搜索结果中。我的意思是,如果我搜索任何来源到目的地之间的距离,他们就会得到相应的结果。他们有一个动
大家好,我有两个问题 1) 我无法找出 Location.distanceBetween 接收纬度和经度的单位。是学位还是微学位?返回距离的单位是什么?很抱歉这个菜鸟问题,但我无法在文档中找到任何内容
我有一个带有纬度和经度的位置,我想获得一个新位置,该位置与该位置的距离为 x 米,角度为 d 度。这将与 Location.distanceBetween() 相反。是否有任何 Android API
编辑:有人建议我使用 this公式来计算我当前位置和放置的标记之间的距离,但无论我将标记放置在何处,我都会得到相同的结果,即 1.004822115417686E7。我将在更新的代码中展示该方法。 我
为什么 Location.distanceBetween 抛出以下示例的异常: Location.distanceBetween(51.5175431381974,-0.150107318771347
当调用 Location.distanceBetween() 并获取初始和最终方位角时,方位角的比例是多少?我得到负值,这对我来说没有意义。方位角从 0 度到 360 度(相对或绝对,无关紧要)。我唯
我正在使用 Android Location 类中的函数:http://developer.android.com/reference/android/location/Location.html#d
我正在使用它来获取当前位置与用户选择的标记之间的距离: float[] distance = new float[1]; Location currentLocation = PECAppli
嗨,我正在尝试实现 http://developer.android.com/reference/android/location/Location.html#distanceBetween(doub
Google Maps Android API Utility Library SphericalUtil.computeDistanceBetween() 之间有什么区别?和 Android [Lo
如果他让圆圈,我试图从用户那里获取范围,但我无法在屏幕上获取范围或距离,它始终显示 0.0,并且不显示 toast 。 public class HomeActivity extends AppCom
我希望每个人都安全我正在使用 flutter,我想计算两个位置之间的距离所以我从 pub.dev 安装了 geolocator 6.0.0+1 here ,这样我就可以找到用户的位置,但我不能使用名为
我在尝试计算一个位置与其他位置列表之间的距离时遇到了一些问题(以便获得最近的位置)。我尝试使用 Location.distanceBetween(...) 和 location.distanceTo(
我是一名优秀的程序员,十分优秀!