2016-07-12 4 views
0

場所の経度を取得することはできません。は、私は私のコードを実行しようとすると、私はいつもこのエラーを取得し、緯度

位置座標を取得するためのコードは次のとおりです。座標を表示するための

LocationTracker.java

public class LocationTracker extends MainActivity implements LocationListener { 
    MainActivity activity; 
    Context context; 
    Location location; 
    LocationManager lm; 

    double lat,longi; 


    boolean isGpsEnabled = false; 
    boolean isNetworkEnabled = false; 
    boolean canGetNetworkLocation = false; 

    public LocationTracker (Context context) { 
     this.context=context; 
     getGPSLocation(); 
    } 


    public Location getGPSLocation() { 

     lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
     isGpsEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 


     if (isGpsEnabled) { 

      /** Check for RUNTIME PERMISSION */ 
      if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 

       if (location == null) {  //Request for NEW DATA coming from GPS 
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,this); 

        if (lm != null) { //Retrieve data from the earlier 
         location=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

         if (location != null) { 
          lat= location.getLatitude(); 
          longi= location.getLongitude(); 
         } 
        } 
       } 



      }else { 
       ActivityCompat.requestPermissions(activity,new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},123); 
      } 

     }else { 

     } 

    return location; 
     } 

    /** GET LATITUDE METHOD */ 
     public double getLatitude() { 
      if (location != null) { 
       lat=location.getLatitude(); 
      } 

      return lat; 
     } 

    /** GET LONGITUDE METHOD */ 
     public double getLongitude() { 
      if (location != null) { 
       longi=location.getLongitude(); 
      } 
      return longi; 
     } 

    @Override 
    public void onLocationChanged(Location location) { 
     lat= location.getLatitude(); 
     longi=location.getLongitude(); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
} 

MainActivityクラス。ところで

public class MainActivity extends AppCompatActivity { 
Context context; 
DBHelper helper; 
LocationTracker tracker; 



TextView contactsTv,sendEmergencyTv; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    helper=new DBHelper(getApplicationContext()); 


    /** 
    * OnClick Listener in android 
     */ 
    contactsTv=(TextView) findViewById(R.id.tv_createContacts); 
    contactsTv.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent= new Intent(MainActivity.this, ContactsActivity.class); //redirect to the COntacts dsadsadsa 

      startActivity(intent); 
     } 
    }); 

sendEmergencyTv=(TextView)findViewById(R.id.tv_sendEmergency); 
    sendEmergencyTv.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      tracker= new LocationTracker(MainActivity.this); 
      double lat,longi; 

      lat= tracker.getLatitude(); 
      longi= tracker.getLongitude(); 

      Toast.makeText(context,"Latitude: "+lat+ "Longitude: "+longi,Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

} 

、私はrequestPermissionパラメータでLocationTrackerクラス内MainActivityインスタンスを配置することを確認していません。ここで

+0

Logcatを表示できますか。 –

+0

私はすでに私の郵便局を更新しました。ありがとう – PhilipJ

答えて

0

ActivityCompat.requestPermissions(activity, 
      new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, 
         Manifest.permission.ACCESS_FINE_LOCATION},123); 

ラインactivitynullであるため、問題の原因。

利用((Activity)context)代わりのactivity .like:

ActivityCompat.requestPermissions(((Activity)context), 
      new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, 
         Manifest.permission.ACCESS_FINE_LOCATION},123); 

注:また

LocationTrackerは、通常のJavaクラスであるので、そうする必要はありませんが、それでActivityを拡張しません。それは値が割り当てられていなかったので、ラインで

+0

私は 'activity'パラメータを 'context'に変更しますが、エラーが出ます。 – PhilipJ

+0

私は自分のコードのどの部分にアクティビティの代わりに((アクティビティ)コンテキストを入れるべきですか)尋ねることはできますか? – PhilipJ

+0

@PhilipJ: 'ActivityCompat.requestPermissions((Activity)context)、 新しい文字列[] {android.Manifest.permission.ACCESS_COARSE_LOCATION、 Manifest.permission.ACCESS_FINE_LOCATION}、123);'行 –

0

ActivityCompat.requestPermissions(activity, new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},123); 

activityはnullです。

LocationTrackerコンストラクタを、Contextの代わりにActivityをパラメータに使用するように変更します。

private Activity activity; 

public LocationTracker (Activity activity) { 
    this.activity = activity; 
    getGPSLocation(); 
} 

NBは:あなたが権限を付与されてかしてきたかどうかを知るためにその活動にonRequestPermissionsResultを実装していることを確認します。

+0

応答sirのためにありがとう、しかし、私は 'コンテキスト'に '活動'のパラメータを変更し、私は以下の返信と同じエラーを与える。 – PhilipJ

関連する問題