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; 
     } 
    }  
} 

クラッシュ私はクリックしてください、私はfirebaseアシスタントを使用していますので、初期化

ヘルプに問題がないボタン

を起動したときに発生私は、私の頭は、このバグを考えて爆発したい下さい:(

+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); 
         } 
} 
内のヌルチェックを追加します。

これがあなたに役立つことを願っています

関連する問題