Вот мой код.. Я хочу найти только название города из широты и долготы.. Теперь я получаю следующее:
"Address[addressLines=[0:"Mustamäe tee 145",1:"12918 Tallinn",2:"Estonia"],feature=145,admin=Harju County,sub-admin=null,locality=Tallinn,thoroughfare=Mustamäe tee,postalCode=12918,countryCode=Estonia,countryName=null,hasLatitude=true,latitude=59.4123264,hasLongitude=true,longitude=24.6903851,phone=null,url=null,extras=null]"
Я попытался преобразовать его в строку и разбить его.. я создал массив String, но когда я пытаюсь назначить "cityName" массиву String "name", я получаю эту ошибку - "Тип несоответствия: невозможно преобразовать из String [] to String"
Не могли бы вы сказать мне, где я ошибаюсь?
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
public class GPSHelper {
static double latitude;
static double longitude;
static String[] name = new String[5];
public static void getCity(LocationManager lm, Context appContext) {
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
longitude = location.getLongitude();
latitude = location.getLatitude();
final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
longitude = location.getLongitude();
latitude = location.getLatitude();
}
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
};
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Geocoder userLocation = new Geocoder(appContext, Locale.getDefault());
List<Address> cityName;
try {
cityName = userLocation.getFromLocation(latitude, longitude, 1);
if(cityName != null && !cityName.isEmpty()) {
for(int i=0; i<5; i++){
name[i] = cityName.get(0).toString().split("");
}
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
Все ответы здесь в порядке. Но почему я задаюсь вопросом, почему вы используете разделение на пустой символ?
Знаете ли вы, что он возвращает массив одиночных символов (и ничего не запускается)?
Оформить код:
String str ="dasd";
String[] strr = str.split("");
for(int i=0; i < strr.length;i++)
System.out.println("i="+i+";str="+strr[i]);
Вывод:
i=0;str=
i=1;str=d
i=2;str=a
i=3;str=s
i=4;str=d
Я бы предположил, что, поскольку cityName.get(0)
возвращает объект Address, есть метод, который вернет вам свое имя, как показано ниже.
name[i] = cityName.get(0).getName();
Надеюсь, что это поможет.
name[i] = cityName.get(0).toString().split("");
name[i]
имеет тип String
, а cityName.get(0).toString().split("")
имеет тип String[]
name[i] = cityName.get(0).toString().split("");
здесь имя [i] будет содержать только строку, но для метода split ("") требуется String Array в левой части.
Действительно ли это для цикла? Waht об удалении цикла for и кодирования его как
if(cityName != null && !cityName.isEmpty()) {
name[] = cityName.get(0).toString().split("");
}
метод Split возвращает массив String; поэтому, когда вы это сделаете:
name[i] = cityName.get(0).toString().split("");
он вернет массив строк, который будет содержать все буквы вашей строки,
У меня нет опыта работы с Android, поэтому я не знаю, что должны возвращать эти методы, но String.split вернет массив String. И имя [i] - это только строка. Таким образом, вы пытаетесь присвоить массив String простой строке.
cityName.get(0).toString().split("");
Это возвращает результат String[]
, но name[i]
должен быть String
, а не String[]
Почему вы разделились?
Следующая строка неверна:
name[i] = cityName.get(0).toString().split("");
(как указывает сообщение об исключении). В самом деле, вы пытаетесь инициализировать name[i]
, который является String, с результатом метода split
, который возвращает массив строк.