Я получаю восстановленные данные с сервера, используя залп и отображаю их в виде списка. Таким образом, я получу адрес клиента от сервера, и мне нужно рассчитать расстояние между текущим местоположением человека, который использует приложение, и адресом, который я получил от сервера. Я получу адрес другого клиента, и мне нужно рассчитать все их расстояния и отображать отдельно в виде списка вместе с именем клиента. Итак, я использую следующий код. Я получаю одинаковое расстояние для всех клиентов, как показано на изображении. Есть места, чем, Дели, Калян. Мне нужно рассчитать расстояние от текущего местоположения до тех мест. Я не понимаю, в чем проблема. код для расчета расстояния с использованием AyncTask. этот код находится внутри фрагмента.
public class getLocationFromNameAsync extends
AsyncTask<String ,String,Double> {
Context context;
onTaskCompleted completed;
public getLocationFromNameAsync(Context context) {
this.context = context;
this.completed = (onTaskCompleted) context;
}
@Override
protected Double doInBackground(String... strings) {
Geocoder coder = new Geocoder(getActivity());
List<Address> address1=null;
List<Address> addresses = null;
try {
address1 = coder.getFromLocationName(district, 5);
} catch (IOException e) {
e.printStackTrace();
}
if (address1 == null) {
Toast.makeText(getActivity(), "Fetching Location,Please wait", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.INVISIBLE);
}
final Address location11 = address1.get(0);
location11.getLatitude();
location11.getLongitude();
if (checkPermission()) {
LocationManager locationManager=(LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Location location1 = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location location2 = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
if (location != null) {
latti = location.getLatitude();
longi = location.getLongitude();
} else if (location1 != null) {
latti = location1.getLatitude();
longi = location1.getLongitude();
} else if (location2 != null) {
latti = location2.getLatitude();
longi = location2.getLongitude();
}
coder = new Geocoder(getActivity(), Locale.getDefault());
try {
addresses = coder.getFromLocation(latti, longi, 1);
if (addresses != null && addresses.size() > 0) {
String address = addresses.get(0).getAddressLine(0);
area = addresses.get(0).getLocality();
String city = addresses.get(0).getAdminArea();
String county = addresses.get(0).getCountryName();
String postal_code = addresses.get(0).getPostalCode();
fullAddress=address+","+area+","+city+","+county+","+postal_code;
}
} catch (IOException e) {
e.printStackTrace();
}
}
LatLng source = new LatLng(latti, longi);
LatLng destination = new LatLng(location11.getLatitude(), location11.getLongitude());
double dis= SphericalUtil.computeDistanceBetween(source,destination);
dis/=1000;
return dis;
}
@Override
protected void onPostExecute(Double aDouble) {
completed.onTaskComplete(aDouble);
}
}
мой код интерфейса.
public interface onTaskCompleted {
public void onTaskComplete(Double result);
}
NavigationDrawerActivity code. В этом задании я получаю результат.
public class navigationDrawer extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener ,onTaskCompleted{
static double distance;
@Override
public void onTaskComplete(Double result) {
distance=result;
Toast.makeText(getApplicationContext(),"result is "+result,Toast.LENGTH_SHORT).show();
}
}
Получение данных из API и настройка данных в listView
StringRequest stringRequest = new StringRequest(Request.Method.POST, getTaskUrl,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
arrayList.clear();
try {
JSONObject jo = new JSONObject(response);
JSONArray ja = jo.getJSONArray("dataObj");
int length=ja.length();
for(int i=0; i<length; i++){
JSONObject temp = ja.getJSONObject(i);
nameC= temp.getString("name");
checkId=temp.getString("clientEid");
clientName=temp.getString("client");
candidateFatherName=temp.getString("fatherName");
clientProcess=temp.getString("otherId");
dueDate=temp.getString("deadline");
JSONArray jsaDate = temp.getJSONArray("updateDetails");
for(int k=0; k<jsaDate.length(); k++){
JSONObject jo1 = jsaDate.getJSONObject(k);
sentDate = jo1.getString("date");
}
JSONArray ja1 = temp.getJSONArray("address");
for(int j=0; j<ja1.length(); j++){
JSONObject jo1 = ja1.getJSONObject(j);
landmark=jo1.getString("landmark");
district= jo1.getString("district");
userAddrss=jo1.getString("full");
Geocoder coder = new Geocoder(getActivity());
new getLocationFromNameAsync(getContext()).execute(district);
arrayList.add(new DataModel(nameC,district,landmark,checkId,Math.floor((navigationDrawer.distance*100)/100),clientName,candidateFatherName,clientProcess,sentDate,dueDate));
}
}