Hai i tried to add the timer function in broadcast receiver application to receive the latitude and longitutude in gps .But i got Error.Anybody please kindly rectify my error.
Thanks in advance
i update the error section
public class MainActivity extends Activity implements LocationListener {
final DBAdapter1 db=new DBAdapter1(this);
private ConnectivityReceiver receiver = null;
private TextView txtNetworkInfo ;
private static TextView latituteField;
private static TextView longitudeField;
private LocationManager locationManager;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
private static final String HostUrl =" xxxxx";
// private static final String HostUrl =" yyyy";
private static final String NAMESPACE = "http://tempuri.org/";
private HttpTransportSE httpTransport = new HttpTransportSE(HostUrl);
private String provider;
private SoapObject request=null;
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1800000; // in Milliseconds
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
latituteField = (TextView) findViewById(R.id.TextView02);
longitudeField = (TextView) findViewById(R.id.TextView04);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// Define the criteria how to select the locatioin provider -> use
// default
Criteria criteria = new Criteria();
Log.i("ConnTest",locationManager.toString());
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
// Initialize the location fields
if (location != null) {
System.out.println("Provider " + provider + " has been selected.");
float lat = (float) (location.getLatitude());
float lng = (float) (location.getLongitude());
latituteField.setText(String.valueOf(lat));
longitudeField.setText(String.valueOf(lng));
} else {
latituteField.setText("provider not available");
longitudeField.setText("provider not available");
}
txtNetworkInfo = (TextView)findViewById(R.id.txtNetworkInfo);
receiver = new ConnectivityReceiver();
registerReceiver(receiver,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
@Override
protected void onResume() {
super.onResume();
//locationManager.requestLocationUpdates(provider,1000, 1, this);
locationManager.requestLocationUpdates(
provider,
MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
this
);
}
/* Remove the locationlistener updates when Activity is paused */
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
float lat = (float) (location.getLatitude());
float lng = (float) (location.getLongitude());
longitudeField.setText(String.valueOf(lng));
latituteField.setText(String.valueOf(lat));
try {
db.open();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long id=db.insert(latituteField.getText().toString(),longitudeField.getText().toString());
if(id>1)
{
Toast.makeText(getBaseContext(),"one record is inserted",Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(getBaseContext(),"not inserted",Toast.LENGTH_LONG).show();
}
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
Toast.makeText(this, "Enabled new provider " + provider,
Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
Toast.makeText(this, "Disenabled provider " + provider,
Toast.LENGTH_SHORT).show();
}
protected void Display(Cursor c) {
Toast.makeText(this, "rowid: " + c.getString(0) + "\n" +
"Latitude: " + c.getString(1) + "\n" + "Longitude: " + c.getString(2) + "\n" +
Toast.LENGTH_LONG, 0).show();
}
@Override
protected void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}
private String getNetworkStateString(NetworkInfo.State state){
String stateString = "Unknown";
switch(state)
{
case CONNECTED: stateString = "Connected"; break;
case CONNECTING: stateString = "Connecting"; break;
case DISCONNECTED: stateString = "Disconnected"; break;
case DISCONNECTING: stateString = "Disconnecting"; break;
case SUSPENDED: stateString = "Suspended"; break;
default: stateString = "Unknown"; break;
}
return stateString;
}
private class ConnectivityReceiver extends BroadcastReceiver{
private Timer mTimer;
private TimerTask mTimerTask;
@Override
public void onReceive(Context context, Intent intent) {
NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if(null != info)
{
String state = getNetworkStateString(info.getState());
if(state.equals("Connected")){
mTimer = new Timer();
mTimer.scheduleAtFixedRate(mTimerTask,1000,5000);
mTimerTask = new TimerTask() {
@Override
public void run() {
result();
}
};
}
else{
//result();
}
}
}
}
private void result() {
SoapPrimitive response=null;
final String methodname="InsertAllGPSInformation";
request = new SoapObject(NAMESPACE,methodname);
envelope.dotNet = true;
request.addProperty("Longitude",longitudeField.getText().toString());
request.addProperty("Latitude",latituteField.getText().toString());
request.addProperty("Date",newtime);
envelope.setOutputSoapObject(request);
String result = null;
try
{
httpTransport.call(NAMESPACE+"IService/"+methodname, envelope);
response = ( SoapPrimitive )envelope.getResponse();
result=response.toString();
}
catch(Exception e)
{
Toast.makeText(getBaseContext(), "Your Net Connected or Not Login to Net"+"", Toast.LENGTH_LONG).show();
Log.e("Upload Picture Error:",e.getMessage());
}
if(result.equals("Saved Successfully")){
Toast.makeText(getBaseContext(), ""+result, Toast.LENGTH_LONG).show();
}
}
}
update
01-09 17:13:27.168: ERROR/AndroidRuntime(1983): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
01-09 17:13:27.168: ERROR/AndroidRuntime(1983): at android.os.Handler.<init>(Handler.java:121)
01-09 17:13:27.168: ERROR/AndroidRuntime(1983): at android.widget.Toast.<init>(Toast.java:68)
01-09 17:13:27.168: ERROR/AndroidRuntime(1983): at android.widget.Toast.makeText(Toast.java:231)
01-09 17:13:27.168: ERROR/AndroidRuntime(1983): at com.varma.samples.conntest.MainActivity.result(MainActivity.java:240)
01-09 17:13:27.168: ERROR/AndroidRuntime(1983): at com.varma.samples.conntest.MainActivity.access$1(MainActivity.java:212)
01-09 17:13:27.168: ERROR/AndroidRuntime(1983): at com.varma.samples.conntest.MainActivity$ConnectivityReceiver$1.run(MainActivity.java:199)
01-09 17:13:27.168: ERROR/AndroidRuntime(1983): at java.util.Timer$TimerImpl.run(Timer.java:289)
mTimerTaskis null when you callmTimer.scheduleAtFixedRate(mTimerTask,1000,5000);inonRecievein yourConnectivityReceiverclass.You need to put that line AFTER
So your code will look like this:
To work this out yourself, if you look at your error message you will see (about half way down):
Caused by: java.lang.NullPointerExceptionSo now you know what has caused your error. Now look down the lines from there until you get to a class & method that you’ve created. In this case its:
at com.varma.samples.conntest.MainActivity$ConnectivityReceiver.onReceive(MainActivity.java:196)The class file you’re in is
com.varma.samples.conntest.MainActivitythe class you’re in isConnectivityReveiverand the method you’re in isonReceive. If that doesn’t help in brackets is the java file and line number where your NullPointer originated from.Sometimes you might need to trace back a few lines if you’re passing a variable through different methods before the NullPointerException is thrown.