Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取位置处的空指针异常_Android_Android Layout_Android Intent_Android Fragments_Nullpointerexception - Fatal编程技术网

Android 获取位置处的空指针异常

Android 获取位置处的空指针异常,android,android-layout,android-intent,android-fragments,nullpointerexception,Android,Android Layout,Android Intent,Android Fragments,Nullpointerexception,我是android新手。我需要获取当前位置的Lattude和Logiude。但它在位置中显示空指针异常。下面我添加了我的代码 LocationManager lm; Location location; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

我是android新手。我需要获取当前位置的Lattude和Logiude。但它在位置中显示空指针异常。下面我添加了我的代码

LocationManager lm;
Location location;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
    location=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    SaveLocation(location);


}

private void SaveLocation(Location location) {

    Long time=new GregorianCalendar().getTimeInMillis()+1*60*1000;
    Intent intent=new Intent(MainActivity.this,AlarmReceiver.class);

    intent.putExtra("lat",location.getLatitude());
    intent.putExtra("lon",location.getLongitude());

    AlarmManager alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);

    alarmManager.set(AlarmManager.RTC_WAKEUP,time,PendingIntent.getBroadcast(this,1,intent,PendingIntent.FLAG_UPDATE_CURRENT));


}
我的androidmanifasted文件如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gps"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_GPS" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.gps.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>


任何人都可以帮助我吗?

您的
位置对象为空,因为没有存储最后一个已知位置

location=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

// Check if last known location exists.
if(location != null) {
    SaveLocation(location);
}

您的位置为空,因为您在创建LocationManager后立即尝试获取最后一个已知位置。在这段时间(几毫秒)内,您的设备找不到任何位置。 在初始化LocationManager和getLastKnownLocation方法之间需要一段时间间隔。我建议将getLastKnownLocation方法放在按钮的OnClick事件中,以创建时间间隔


然后贴上你的日志。你需要当前的位置。看看我的ans在这里:我如何才能得到位置?你必须启用你的gps并有信号,否则它将失败。如果你正在创建一个应用程序,你必须意识到这样一个事实:用户有时会尝试使用你的应用程序,即使他们没有信号。因此,您必须始终检查这些NullPointerException,以便您的应用程序不会崩溃。如果要在emulator中进行测试,可以检查以下内容:
@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
     /.... 
}

button.setOnClickListener(new OnClickListener(){
      @Override
      public void onClick(View v){
           location=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
           SaveLocation(location);
      }
});
//to find the current latitude and longitude of user
public String  getMyLocation(){

    locationManager=(LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    Location location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);


    if(location!=null){

        loc[0]=location.getLatitude();
        loc[1]=location.getLongitude();
        Log.d("STATUS n ", loc[0]+"entered 1"+loc[1]);

    }
    else {
        location=locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        if(location!=null)
        {

            loc[0]=location.getLatitude();
            loc[1]=location.getLongitude();
            Log.d("STATUS n","else"+loc[0]+"entered 1"+loc[1] );
        }

    }
    return getPlace(loc);
}