在RecyclerView中找不到在地图上显示距离的方法

问题描述

我正在尝试制作一个用于拖车服务的实时跟踪应用程序。我遵循了Google的教程:https://codelabs.developers.google.com/codelabs/realtime-asset-tracking/index.html?index=..%2F..index#0,该教程使用Firebase实时数据库存储位置。我最终得到了一个应用程序,该应用程序通过标记显示了已注册的拖车服务的位置。之后,我修改代码获取当前位置。在地图上显示拖车服务的代码

private void subscribetoUpdates() {
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("TowService");
    ref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot,String prevIoUsChildName) {
            setMarker(dataSnapshot);
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot,String prevIoUsChildName) {
            setMarker(dataSnapshot);
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot,String prevIoUsChildName) {
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
        }

        @Override
        public void onCancelled(DatabaseError error) {
            Log.d(TAG,"Failed to read value.",error.toException());
        }
    });
}

private void setMarker(DataSnapshot dataSnapshot) {
    // When a location update is received,put or update
    // its value in mMarkers,which contains all the markers
    // for locations received,so that we can build the
    // boundaries required to show them all on the map at once
    String key = dataSnapshot.getKey();
    double lat = Double.parseDouble(dataSnapshot.child("userLocation").child("latitude").getValue().toString());
    double lng = Double.parseDouble(dataSnapshot.child("userLocation").child("longitude").getValue().toString());
    LatLng location = new LatLng(lat,lng);

    //  CALculaTING disTANCE FROM CURRENT LOCATION TO MARKER
    Location currentLocation = new Location("current");
    currentLocation.setLatitude(lastKNownLocation.getLatitude());
    currentLocation.setLongitude(lastKNownLocation.getLongitude());
    Location towLocation = new Location("notCurrent");
    towLocation.setLatitude(lat);
    towLocation.setLongitude(lng);
    float distance = currentLocation.distanceto(towLocation) / 1000;
    DecimalFormat decimalFormat = new DecimalFormat();
    decimalFormat.setMaximumFractionDigits(2);

    if (!mMarkers.containsKey(key)) {
        mMarkers.put(key,mMap.addMarker(new MarkerOptions().title(decimalFormat.format(distance) + "KM").position(location)));
    } else {
        mMarkers.get(key).setPosition(location);
    }

    LatLngBounds.Builder builder = new LatLngBounds.Builder();
    for (Marker marker : mMarkers.values()) {
        builder.include(marker.getPosition());
    }
}

currentLocation是用户的当前位置,而towLocation是我从Firebase实时数据库获得的拖车服务的位置。在这里,我设置标记标题显示用户与拖车服务之间的距离。所有这些工作正常,但现在我也想在RecyclerView中显示所有拖车服务并显示距离。 TowService类:

public class TowService {
private String towName;
private String towEmail;
private float towdistance;

public TowService() {
}

public TowService(String towName,String towEmail) {
    this.towName = towName;
    this.towEmail = towEmail;
}

public void setTowName(String towName) {
    this.towName = towName;
}

public void setTowEmail(String towEmail) {
    this.towEmail = towEmail;
}

public void setTowdistance(float towdistance) {
    this.towdistance = towdistance;
}

public String getTowName() {
    return towName;
}

public String getTowEmail() {
    return towEmail;
}

public float getTowdistance(){
    
}

}

Tow服务适配器:

public class TowServiceAdapter extends RecyclerView.Adapter<TowServiceAdapter.TowServiceViewHolder> {

private Context mContext;
private List<TowService> mTowServices;

public TowServiceAdapter(Context context,List<TowService> towServices) {
    mContext = context;
    mTowServices = towServices;
}

@NonNull
@Override
public TowServiceViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
    View view = LayoutInflater.from(mContext).inflate(R.layout.tow_service_item,parent,false);
    return new TowServiceViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull TowServiceViewHolder holder,int position) {
    TowService currentTowService = mTowServices.get(position);

    holder.towName.setText(currentTowService.getTowName());
    holder.towEmail.setText(currentTowService.getTowEmail());
    //holder.towdistance.setText(String.valueOf(currentTowService.getTowdistance()));
}

@Override
public int getItemCount() {
    return mTowServices.size();
}

public class TowServiceViewHolder extends RecyclerView.ViewHolder {
    TextView towName;
    TextView towEmail;
    TextView towdistance;

    public TowServiceViewHolder(@NonNull View itemView) {
        super(itemView);
        towName = itemView.findViewById(R.id.tow_service_name);
        towEmail = itemView.findViewById(R.id.tow_service_email);
        towdistance = itemView.findViewById(R.id.tow_service_distance);
    }
}

}

我的想法是:在MapsActivity中创建一个函数,该函数将返回距离,然后在 public float getTowdistance()方法中使用该函数,然后再使用 getTowdistance()的结果em>在适配器中,如前所示。但是到目前为止,我尝试过的所有方法都失败了。有人知道我该怎么做吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...