2017-11-23 8 views
-1

私のアプリでは、ボタンを押すと現在の場所を見つけることができますアプリを初めて起動する.Whenever、それはユーザーの許可を求めたが許可がlogcatエラー以下与えて付与されたときに、それがクラッシュ:java.lang.RuntimeException:結果の配信に失敗しましたResultInfo {who = @アンドロイド:requestPermissions :,リクエスト= 1、結果= -1、データ=インテント

FATAL EXCEPTION: mainProcess: com.shubhamsharma.idonate, PID: 17404 
java.lang.RuntimeException: Failure delivering result ResultInfo{[email protected]:requestPermissions:, request=1, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.shubhamsharma.idonate/com.shubhamsharma.idonate.iDonate}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference 
                       at android.app.ActivityThread.deliverResults(ActivityThread.java:4123) 
                       at android.app.ActivityThread.handleSendResult(ActivityThread.java:4166) 
                       at android.app.ActivityThread.-wrap20(ActivityThread.java) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1562) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:163) 
                       at android.app.ActivityThread.main(ActivityThread.java:6237) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference 
                       at com.shubhamsharma.idonate.iDonate.onRequestPermissionsResult(iDonate.java:165) 
                       at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7263) 
                       at android.app.Activity.dispatchActivityResult(Activity.java:7115) 
                       at android.app.ActivityThread.deliverResults(ActivityThread.java:4119) 
                       at android.app.ActivityThread.handleSendResult(ActivityThread.java:4166)  
                       at android.app.ActivityThread.-wrap20(ActivityThread.java)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1562)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:163)  
                       at android.app.ActivityThread.main(ActivityThread.java:6237)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)  

流れはこの 主要な活動のようなものです(ログインIDを取得し、パスワードを確認し、firebaseからチェック)--->その後、許可を求めてクラッシュするidonateアクティビティが来る

主な活動コード

パブリッククラスMainActivityので、そのクラスをチェックnullが返されるAppCompatActivity {

Button login, register; 
EditText email,password; 
FirebaseAuth mAuth; 
FirebaseAuth.AuthStateListener firebaseAuthListener; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


    email = (EditText) findViewById(R.id.email); 
    password = (EditText) findViewById(R.id.password); 
    login = (Button) findViewById(R.id.button2); 
    register=(Button)findViewById(R.id.button1); 
    mAuth = FirebaseAuth.getInstance(); 



    firebaseAuthListener = new FirebaseAuth.AuthStateListener() { 

     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
      if (user != null) { 

       Intent intent = new Intent(MainActivity.this, iDonate.class); 
       startActivity(intent); 
       return; 

      } 
     } 


    }; 

    register.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final String log= email.getText().toString(); 
      final String pas= password.getText().toString(); 
      if(log.length()!=0 && pas.length()!=0) { 
       mAuth.createUserWithEmailAndPassword(log, pas).addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 

         if (!task.isSuccessful()) { 
          Toast.makeText(getApplicationContext(), "Something Went Wrong", Toast.LENGTH_LONG).show(); 
         } else { 
          String userid = mAuth.getCurrentUser().getUid(); 
          DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child(userid); 
          current_user_db.setValue(true); 
         } 
        } 
       }); 
      } 
      else{ 
       Toast.makeText(getApplicationContext(), "Login Id or Password cannot be Empty", Toast.LENGTH_SHORT).show(); 
       email.setText(""); 
       password.setText(""); 

      } 
     } 
    }); 

    login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final String log = email.getText().toString(); 
      final String pas = password.getText().toString(); 
      if(log.length()!=0 && pas.length()!=0) { 
       mAuth.signInWithEmailAndPassword(log, pas).addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() { 

        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         if (!task.isSuccessful()) 
          Toast.makeText(getApplicationContext(), "Signup Error", Toast.LENGTH_SHORT).show(); 

         else { 
          Intent intent = new Intent(MainActivity.this, iDonate.class); 
          startActivity(intent); 
          finish(); 
          return; 
         } 
        } 
       }); 

      } 
      else{ 
       Toast.makeText(getApplicationContext(), "Login Id or Password cannot be Empty", Toast.LENGTH_SHORT).show(); 
       email.setText(""); 
       password.setText(""); 
      } 
     } 
    }); 


} 



@Override 
protected void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(firebaseAuthListener); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    mAuth.removeAuthStateListener(firebaseAuthListener); 

} 

}

public class iDonate extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener { 

    private GoogleMap mMap; 
    GoogleApiClient mGoogleApiClient; 
    Location mLastLocation; 
    LocationRequest mLocationRequest; 
    SupportMapFragment mapFragment; 
    private Button mlogout; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_i_donate); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     mlogout=(Button)findViewById(R.id.logout); 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 

     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(iDonate.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); 
     // return; 
     } else { 
      mapFragment.getMapAsync(this); 

     } 


     mlogout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       FirebaseAuth.getInstance().signOut(); 
       Intent intent=new Intent(getApplicationContext(),MainActivity.class); 
       startActivity(intent); 
       finish(); 
       return; 

      } 
     }); 


    } 


    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(iDonate.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); 
      // return; 
     } 

     buildGoogleApiClient(); 
     mMap.setMyLocationEnabled(true); 




    } 


    protected synchronized void buildGoogleApiClient(){ 


     mGoogleApiClient= new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 

     mGoogleApiClient.connect(); 


    } 


    @Override 
    public void onConnected(@Nullable Bundle bundle) { 

     mLocationRequest = new LocationRequest(); 
     mLocationRequest.setInterval(1000); 
     mLocationRequest.setFastestInterval(1000); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(iDonate.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST_CODE); 
     return; 
     } 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (com.google.android.gms.location.LocationListener) this); 


    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

    @Override 
    public void onLocationChanged(Location location) { 

     mLastLocation=location; 
     LatLng latLng=new LatLng(location.getLatitude(),location.getLongitude()); 

     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
     mMap.animateCamera(CameraUpdateFactory.zoomTo(14)); 

     String userId = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
     DatabaseReference ref = FirebaseDatabase.getInstance().getReference("DriversAvailable"); 

     GeoFire geoFire = new GeoFire(ref); 
     geoFire.setLocation(userId,new GeoLocation(location.getLatitude(),location.getLongitude())); 


    } 

    final int LOCATION_REQUEST_CODE = 1; 
    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     // Toast.makeText(getApplicationContext(), String.valueOf(grantResults[0]), Toast.LENGTH_LONG).show(); 
     switch (requestCode) { 
      case LOCATION_REQUEST_CODE: { 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

        mapFragment.getMapAsync(this); 
      // break; 
       } 
       else { 
        Toast.makeText(getApplicationContext(), "Please allow your GPS Permission", Toast.LENGTH_LONG).show(); 
       } 
       // return; 
       break; 
      } 
     } 
    } 
    public boolean hasAllPermissionsGranted(@NonNull int[] grantResults) { 
     for (int grantResult : grantResults) { 
      if (grantResult == PackageManager.PERMISSION_DENIED) { 
       return false; 
      } 
     } 
     return true; 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 

     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
     FirebaseUser userId = FirebaseAuth.getInstance().getCurrentUser();///////////////////////////// 
     DatabaseReference ref = FirebaseDatabase.getInstance().getReference("DriversAvailable"); 
    // Toast.makeText(getApplicationContext(),userId.getUid(),Toast.LENGTH_LONG).show(); 
     GeoFire geoFire = new GeoFire(ref); 
     geoFire.removeLocation(userId.getUid()); 
     // return; 
    } 
} 
+0

[NullPointerExceptionとは何か、そして修正する方法それ?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –

答えて

0

mapFragment.getMapAsync(本)以下

idonateコードを拡張

関連する問題