0

私はFusedLocationProviderを実装しています。 しかし、私は実現し、1つのアクティビティで緯度と経度を取得しましたが、私は今、別の非アクティビティクラスGetLocationActivityに実装し、Maps_activityクラスの場所データを取得します。私はデータを取得できません!アンドロイドのマップアクティビティでクラスから位置データを取得する方法は?

クラスからデータを取得するためにとにかくそこに私のマップの活動でそれを示すか。 私はクラスのデータを保存するためにsharedPrefを試しましたが、結果はありません。

P.S:GetLocationActivityが実行されなかったか、またはインスタンス化できませんでした。ここで

コード

Map_activity.javaある

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 
    private GoogleApiClient mGoogleApiClient; 
    private FloatingActionButton floatingActionButton; 
    private static final String LIST_FRAGMENT_TAG = "list_fragment"; 
    private static final String TAG = "list_fragment"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     floatingActionButton = (FloatingActionButton) findViewById(R.id.fab); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

     final GetLocationActivity obj = new GetLocationActivity(); 
     floatingActionButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       obj.GetLocation(); 

      } 
     }); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 

     // Add a marker in Karachi and move the camera 
     LatLng sydney = new LatLng(24.9217531, 66.8943302); 
     //mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Karachi")); 
     mMap.animateCamera(CameraUpdateFactory.zoomTo(10.75f)); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 

    } 

GetLocationActivity.java

public class GetLocationActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener , com.google.android.gms.location.LocationListener { 

    public final static String TAG = "Application"; 
    private GoogleApiClient mGoogleApiClient; 
    private Location mLastLocation; 
    private LocationRequest mLocationRequest; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

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


    } 

    public void GetLocation() 
    { 
     try { 

      mLocationRequest = LocationRequest.create(); 
      mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
      mLocationRequest.setInterval(10000); // Update location every second 

      LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 

      mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
        mGoogleApiClient); 
      if (mLastLocation != null) { 


       Log.d(TAG, "onConnected: "+String.valueOf(mLastLocation.getLatitude())); 
       Log.d(TAG, "onConnected: "+String.valueOf(mLastLocation.getLongitude())); 

      } 
     } catch (SecurityException e) { 

     } 

    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
      GetLocation(); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     Toast.makeText(this, "onConnectionSuspended: " + String.valueOf(i), 
       Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Toast.makeText(this, "onConnectionFailed: " + connectionResult.toString(), 
       Toast.LENGTH_LONG).show(); 
    } 

    protected void onStart() { 
     mGoogleApiClient.connect(); 
     super.onStart(); 
    } 

    protected void onStop() { 
     mGoogleApiClient.disconnect(); 
     super.onStop(); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 

    } 
+1

このGetLocationActivity obj =新しいGetLocationActivity();は動作しません。たとえば、oncreateは自動的に呼び出されません。これをしないでください。単純なクラスを作成します。これまでに –

+0

@ PavneetSinghが必要ですが、GoogleClientをクラスで実行して場所を取得する必要があります。どうやって他のクラスを走らせることができるの? –

+0

はい、あなたはそれにコンテキストを渡す必要があります、あなたの現在のアプローチはあなたが欲しい方法で動作しないだろう、あなたはまた、活動と場所の論理クラス –

答えて

0

静的

を使用して GetLocation()を試してみてくださいこの

floatingActionButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     GetLocationActivity.getLocation(); 
    } 
}); 

のように機能の

public static void getLocation() { 
    ... 
} 

アクセス私の知る限り、我々はインスタンスオブジェクトを使用してアクセスする必要はありません、我々は静的オブジェクトにアクセスすることができます。 CMIIW。

関連する問題