0

此活動有2個按鈕,開始和停止。當按鈕開始點擊時,它將用戶位置保存到firebase並按鈕停止以停止它。因此,我使用LocationManager.requestLocationUpdates將每5秒鐘的用戶位置插入Firebase。但是,這讓我的應用程序崩潰,這裏是我的代碼LocationManager.requestLocation更新與Firebase崩潰的應用程序

package com.example.julio.firebasemaster; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.support.v4.app.ActivityCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 

import java.util.HashMap; 

public class MainActivity extends AppCompatActivity { 

    TextView condition; 
    Button start; 
    Button stop; 

    DatabaseReference mDatabase; 
    DatabaseReference mChild; 

    LocationManager locationManager; 
    LocationListener locationListener; 

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

     mDatabase = FirebaseDatabase.getInstance().getReference(); 
     mChild = mDatabase.child("user"); 

     start = (Button) findViewById(R.id.btnStart); 
     stop = (Button) findViewById(R.id.btnStop); 

     permission(); 

     start.setOnClickListener(new View.OnClickListener() { 
      @SuppressWarnings("MissingPermission") 
      @Override 
      public void onClick(View view) { 

       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener); 
       locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0, locationListener); 
       permission(); 

       locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

       locationListener = (new LocationListener() { 
        @Override 
        public void onLocationChanged(Location location) { 
         String latitude = location.getLatitude() + " "; 
         String longitude = location.getLongitude() + " "; 

         HashMap<String, String> data = new HashMap<>(); 
         data.put("latitude", latitude); 
         data.put("longitude", longitude); 

         mChild.setValue(data); 
        } 

        @Override 
        public void onStatusChanged(String s, int i, Bundle bundle) { 

        } 

        @Override 
        public void onProviderEnabled(String s) { 

        } 

        @Override 
        public void onProviderDisabled(String s) { 

        } 
       }); 
      } 
     }); 

     stop.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       locationManager.removeUpdates(locationListener); 
      } 
     }); 

    } 

    private void permission() { 
     if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // ActivityCompat#requestPermissions 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for ActivityCompat#requestPermissions for more details. 
      return; 
     } 
    }  
} 

美眉出現,當我點擊我使用火力助理啓動按鈕

,所以與初始化

幫助沒有問題我請,我的頭要爆炸思考這個bug :(

+1

什麼是日誌中的異常? – Joshua

+0

其 「java.lang.NullPointerException」 sir:D –

+0

請包括完整的異常日誌。 – Joshua

回答

0

添加空檢查內部onLocationChanged

public void onLocationChanged(Location location) { 
         if (location != null) { 
         String latitude = location.getLatitude() + " "; 
         String longitude = location.getLongitude() + " "; 

         HashMap<String, String> data = new HashMap<>(); 
         data.put("latitude", latitude); 
         data.put("longitude", longitude); 

         mChild.setValue(data); 
         } 
} 

我希望這能幫到你