Ok следующая проблема.Попытка получить LatLng с адреса или местоположения в android
Я пытаюсь взять вмененный адрес или местоположение и вывести LatLng для хранения. Это то, что я до сих пор основал на How can I find the latitude and longitude from address?, третий ответ вниз.
import java.util.List;
import com.google.android.gms.maps.model.LatLng;
import android.app.Fragment;
import android.location.Address;
import android.location.Geocoder;
public class Mapping extends Fragment
{
public LatLng getLocationFromAddress(String _address) {
Geocoder coder = new Geocoder(getActivity());
List<Address> address;
LatLng p1 = null;
try {
address = coder.getFromLocationName(_address, 1);
if (address == null) {
return null;
}
Address location = address.get(0);
location.getLatitude();
location.getLongitude();
p1 = new LatLng(location.getLatitude(), location.getLongitude());
} catch (Exception ex) {
ex.printStackTrace();
}
return p1;
Я пытаюсь назвать это в другом классе.
make.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//String _name = (String) txtName.getText().toString();
//String _address = (String) txtAddress.getText().toString();
String _name = "Some Name"; //Just to pass some information
String _address = "New York";
contact.setName(_name);
contact.setAddress(_address);
// Should populate lladdress with a LatLng
LatLng lladdress = mapping.getLocationFromAddress(_address);
contact.setLatLng(lladdress);
}
});
Весь код до // Should populate lladdress with a LatLng
работает, но если я добавить эту часть в мое приложение перестает работать. Я использовал Toast в прошлом, чтобы проверить код, но я не знаю, как это проверить, и я пытаюсь отлаживать и не вижу ничего полезного. Любые идеи о том, что не так с моим кодом?
Обновление: Спасибо @bjiang за ваш код. Я решил изменить его, поэтому выведите двойной 2 и верните его, чтобы я мог хранить его в базе данных или использовать его, как мне нужно позже.
public class Mapping extends Fragment
{
\t
\t //String[] happy = new String[2];
\t
\t protected double[] getLatLng(Context context, String address/*, boolean setDestination*/) {
String uri = "http://maps.google.com/maps/api/geocode/json?address="
+ address + "&sensor=false";
\t \t Message.message(context , ""+uri);
HttpGet httpGet = new HttpGet(uri);
HttpClient client = new DefaultHttpClient();
HttpResponse response;
StringBuilder stringBuilder = new StringBuilder();
try {
response = client.execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
int byteData;
while ((byteData = stream.read()) != -1) {
stringBuilder.append((char) byteData);
}
} catch (IOException e) {
e.printStackTrace();
}
double[] _latlng = new double[2];
JSONObject jsonObject;
try {
jsonObject = new JSONObject(stringBuilder.toString());
_latlng[1] = ((JSONArray) jsonObject.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lng");
_latlng[0] = ((JSONArray) jsonObject.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lat");
} catch (JSONException e) {
e.printStackTrace();
}
\t \t return _latlng;
Вот некоторые из журнала:
03-15 12: 30: 05.803: E/AndroidRuntime (17863): неустранимые: Основной
03-15 12: 30: 05.803: Е/AndroidRuntime (17863): Процесс: edu.ecpi.myappv3, ПИД: 17863
03-15 12: 30: 05,803: Е/AndroidRuntime (17863): android.os.NetworkOnMainThreadException
03-15 12: 30: 05.803: E/AndroidRuntime (17863): at android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1147)
03-15 12: 30: 05,803: Е/AndroidRuntime (17863): в java.net.InetAddress.lookupHostByName (InetAddress.java:418)
03-15 12: 30: 05,803: Е/AndroidRuntime (17863): в java.net.InetAddress.getAllByNameImpl (InetAddress.java:252)
03-15 12: 30: 05,803: Е/AndroidRuntime (17863): в java.net.InetAddress.getAllByName (InetAddress .java: 215)
03-15 12: 30: 05,803: Е/AndroidRuntime (17863): в org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection (DefaultClientConnectionOperator.java:172)
03-15 12: 30: 05,803: Е/AndroidRuntime (17863): в org.apache.http.impl.conn.AbstractPoolEntry.open (AbstractPoolEntry.java:167)
один вопрос, в методе getLocationFromAddress, вы возвращаетесь нуль, если метод coder.getFromLocationName возвращает нуль, но в методе, где вызывается метод вы не проверяя, чтобы увидеть, если lladdress имеет нулевое значение, добавить if (lladdress == null) после того, как он вернется из map.getLocationFromAddress – faljbour