I tried to get lat and long position by passing values from Telnet. After i complete that now i try to implement Reverse Geocoding to Get apporx address of place in emulator.
Followd this link
but it shows application flows stopped unexpectedly.
Error in log cat..
05-19 16:51:14.292: E/AndroidRuntime(460): java.lang.NullPointerException
05-19 16:51:14.292: E/AndroidRuntime(460): at com.gps.HelloAndroidGpsActivity$ReverseGeocodeLookupTask.onPostExecute(HelloAndroidGpsActivity.java:137)
05-19 16:51:14.292: E/AndroidRuntime(460): at com.gps.HelloAndroidGpsActivity$ReverseGeocodeLookupTask.onPostExecute(HelloAndroidGpsActivity.java:1)
05-19 16:51:14.292: E/AndroidRuntime(460): at android.os.AsyncTask.finish(AsyncTask.java:417)
05-19 16:51:14.292: E/AndroidRuntime(460): at android.os.AsyncTask.access$300(AsyncTask.java:127)
05-19 16:51:14.292: E/AndroidRuntime(460): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
05-19 16:51:14.292: E/AndroidRuntime(460): at android.os.Handler.dispatchMessage(Handler.java:99)
05-19 16:51:14.292: E/AndroidRuntime(460): at android.os.Looper.loop(Looper.java:130)
05-19 16:51:14.292: E/AndroidRuntime(460): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-19 16:51:14.292: E/AndroidRuntime(460): at java.lang.reflect.Method.invokeNative(Native Method)
05-19 16:51:14.292: E/AndroidRuntime(460): at java.lang.reflect.Method.invoke(Method.java:507)
05-19 16:51:14.292: E/AndroidRuntime(460): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-19 16:51:14.292: E/AndroidRuntime(460): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-19 16:51:14.292: E/AndroidRuntime(460): at dalvik.system.NativeStart.main(Native Method)
…
HelloAndroidGpsActivity.java
package com.gps;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import com.gps.GeoCodeResult;
import com.gps.GeoCoder;
public class HelloAndroidGpsActivity extends Activity {
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds
private GeoCoder geoCoder = new GeoCoder();
protected LocationManager locationManager;
protected Location currentLocation;
protected Button retrieveLocationButton;
protected Button reverseGeocodingButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
retrieveLocationButton = (Button) findViewById(R.id.retrieve_location_button);
reverseGeocodingButton = (Button) findViewById(R.id.reverse_geocoding_button);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
new MyLocationListener()
);
retrieveLocationButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
showCurrentLocation();
}
});
reverseGeocodingButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
performReverseGeocodingInBackground();
}
});
}
protected void performReverseGeocodingInBackground() {
showCurrentLocation();
new ReverseGeocodeLookupTask().execute((Void[])null);
}
protected void showCurrentLocation() {
currentLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (currentLocation != null) {
String message = String.format(
"Current Location \n Longitude: %1$s \n Latitude: %2$s",
currentLocation.getLongitude(), currentLocation.getLatitude()
);
Toast.makeText(HelloAndroidGpsActivity.this, message,
Toast.LENGTH_LONG).show();
}
}
private class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
String message = String.format(
"New Location \n Longitude: %1$s \n Latitude: %2$s",
location.getLongitude(), location.getLatitude()
);
Toast.makeText(HelloAndroidGpsActivity.this, message, Toast.LENGTH_LONG).show();
}
public void onStatusChanged(String s, int i, Bundle b) {
Toast.makeText(HelloAndroidGpsActivity.this, "Provider status changed",
Toast.LENGTH_LONG).show();
}
public void onProviderDisabled(String s) {
Toast.makeText(HelloAndroidGpsActivity.this,
"Provider disabled by the user. GPS turned off",
Toast.LENGTH_LONG).show();
}
public void onProviderEnabled(String s) {
Toast.makeText(HelloAndroidGpsActivity.this,
"Provider enabled by the user. GPS turned on",
Toast.LENGTH_LONG).show();
}
}
public class ReverseGeocodeLookupTask extends AsyncTask <Void, Void, GeoCodeResult> {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
this.progressDialog = ProgressDialog.show(
HelloAndroidGpsActivity.this,
"Please wait...contacting Yahoo!", // title
"Requesting reverse geocode lookup", // message
true // indeterminate
);
}
@Override
protected GeoCodeResult doInBackground(Void... params) {
return geoCoder.reverseGeoCode(currentLocation.getLatitude(), currentLocation.getLongitude());
}
@Override
protected void onPostExecute(GeoCodeResult result) {
Toast.makeText(HelloAndroidGpsActivity.this, result.toString(), Toast.LENGTH_LONG).show();
}
}
}
GeoCoder.java
*package com.gps;
import com.gps.GeoCodeResult;
import com.gps.HttpRetriever;
import com.gps.XmlParser;
public class GeoCoder {
private static final String YAHOO_API_BASE_URL = "http://where.yahooapis.com/geocode?q=%1$s,+%2$s&gflags=R&appid=[yourappidhere]"; **//This is correct API**
private HttpRetriever httpRetriever = new HttpRetriever();
private XmlParser xmlParser = new XmlParser();
public GeoCodeResult reverseGeoCode(double latitude, double longitude) {
String url = String.format(YAHOO_API_BASE_URL, String.valueOf(latitude), String.valueOf(longitude));
String response = httpRetriever.retrieve(url);
return xmlParser.parseXmlResponse(response);
}
}*
GeoCodeResult
package com.gps;
public class GeoCodeResult {
public String line1;
public String line2;
public String line3;
public String line4;
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Location:");
if (line1!=null)
builder.append("-"+line1);
if (line2!=null)
builder.append("-"+line2);
if (line3!=null)
builder.append("-"+line3);
if (line4!=null)
builder.append("-"+line4);
return builder.toString();
}
}
Problem is geocode result is null
Did i missed something . Point me were i did mistake. Thank you
Sometimes it happens.It gives us null.Same problem was in my case.
Try it on other devices or after some time.Try to hit server for address only once in a minute.
More than one request in one minute for address,can cause ‘null’