Reputation: 417
I have two classes MainActivity.java (Main Class) & MyCurrentLoctionListener.java
I am willing to get my current geo location when I run my app (onLoad-onCreate) :
I get Hi :: null
even though I defined myLocation as public , so the MainActivity.java (Main Class) can see it.
MainActivity.java :
package com.example.test;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = (Button) findViewById(R.id.make_folder);
TextView txt1 = (TextView) findViewById(R.id.textView1);
//import android.location.LocationManager;
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
MyCurrentLoctionListener locationListener = new MyCurrentLoctionListener();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,locationListener);
txt1.setText("HI :: " + locationListener.myLocation);
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
}
}); //setOnClickListener
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
MyCurrentLoctionListener.java :
package com.example.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
public class MyCurrentLoctionListener implements LocationListener {
public String myLocation;
@Override
public void onLocationChanged(Location location) {
location.getLatitude();
location.getLongitude();
myLocation = "Latitude = " + location.getLatitude() + " Longitude = " + location.getLongitude();
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
}
Permissions are already included in Manifest.xml
Upvotes: 1
Views: 9713
Reputation: 628
When you start your activity, your MyCurrentLoctionListener will not be able to get the location right away.
It would be best to pass the TextView into your MyCurrentLoctionListener class like this:
public class MyCurrentLoctionListener implements LocationListener {
public String myLocation;
private TextView mTextView;
MyCurrentLoctionListener(TextView tv) {
this.mTextView = tv;
}
@Override
public void onLocationChanged(Location location) {
location.getLatitude();
location.getLongitude();
mTextView.setText("Latitude = " + location.getLatitude() + " Longitude = " + location.getLongitude());
}
....
Upvotes: 3
Reputation: 268
It is probably because you are using myLocation too soon. When you request for GPS data with an onLocationChanged, it might take a second to find your coordinates so you need to take that into account. Maybe change the TextView within the onLocationChanged function or something of the sort.
Upvotes: 1