2015-05-14 3 views
0

Я работаю с картами google. Я думаю, что правильно получаю пару Lat/Long - то есть координаты, которые я пытаюсь отобразить на карте, - и они корректно обновляются в моем классе SignIn.Как получить обновленные значения удвоения в другом классе

У меня также есть класс Map, и я хочу, чтобы он мог получить обновленные координаты от класса SignIn. Однако в настоящее время попытки получить координаты GPS всегда возвращают значения по умолчанию, которые я жестко запрограммировал в классе SignIn.

Как получить обновленные значения из класса SignIn в классе Map?

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.impl.conn.SingleClientConnManager; 
import org.apache.http.message.BasicNameValuePair; 

import com.google.android.gms.maps.model.LatLng; 

import android.app.Fragment; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.provider.OpenableColumns; 

import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class SignIn extends Fragment { 

    Context context_frag1; 

    HttpPost httppost; 
    StringBuffer buffer; 
    HttpResponse Response; 
    HttpClient httpclient; 
    List<NameValuePair> nameValuePairs; 
    Intent intent; 

    protected Context context; 
    Button b; 
    Button sendBtn; 
    //String m_username,m_password; 

    ProgressDialog dialog = null; 
    public double latitude = 32.3234;// these values are getting my other class always but i update them down here y it getting these 
    public double longitude = 72.456; 

    EditText username,password; 

    public SignIn() { } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View view=inflater.inflate(R.layout.fragment_layout_two,container, false); 
     b = (Button)view.findViewById(R.id.button1); 

     username = (EditText)view.findViewById(R.id.username); 
     password = (EditText)view.findViewById(R.id.password); 

     b.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       new Thread(new Runnable() { 
        public void run() { 
         login();  
        } 
       }).start(); 

      } 
     }); 

     return view; 
    } 

    @SuppressWarnings("deprecation") 
    void login(){ 

     while(true){ 

      try{    

       httpclient=new DefaultHttpClient(); 
       httppost= new HttpPost("my web adderss"); 

       nameValuePairs = new ArrayList<NameValuePair>(1); 
       // Always use the same variable name for posting i.e the android side variable name and php side variable name should be similar, 

       nameValuePairs.add(new BasicNameValuePair("username",m_username.getText().toString().trim())); 
       nameValuePairs.add(new BasicNameValuePair("password",m_password.getText().toString().trim())); 
       //nameValuePairs.add(new BasicNameValuePair("id",m_id.getText().toString().trim())); 

       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       Response=httpclient.execute(httppost); 

       ResponseHandler<String> responseHandler = new BasicResponseHandler(); 

       final String response = httpclient.execute(httppost, responseHandler); 
       System.out.println("Response : " + response); 
       // delay to send loactions 
       getActivity().runOnUiThread(new Runnable() { 
        public void run() { 

         try{ 
          String strn = response.replaceAll("[a-zA-Z//:]", "");  
          String[] parts = strn.split(",");// this will separte lat lng where it get , 
          String part1 = parts[0]; 
          String part2 = parts[1]; 
          latitude = Double.parseDouble(part1); 
          longitude = Double.parseDouble(part2); 
          //here i get lat and lng these are updating dynamically 
          Toast.makeText(getActivity().getApplicationContext(), ""+latitude +""+ longitude, Toast.LENGTH_LONG).show(); 
         } catch (ArrayIndexOutOfBoundsException e) { 
          Toast.makeText(getActivity().getApplicationContext(), "ArrayIndexOutOfBoundsException", Toast.LENGTH_LONG).show(); 
         } 

         try { 
          Response.getEntity().consumeContent(); 
          httpclient.getConnectionManager().closeExpiredConnections(); 
          httpclient.getConnectionManager().shutdown(); 
         } catch (IOException e) { 
          Toast.makeText(getActivity().getApplicationContext(), "IOException", Toast.LENGTH_LONG).show(); 
          e.printStackTrace(); 
         } 

        } 

       }); 

      }catch(Exception e){ 
       //dialog.dismiss(); 
       Log.i("catch", "i got exception here", e); 
      } 
     } 
    } 
} 

Теперь у меня есть другой класс карты, где я получаю, чтобы эти широты LNG

> import com.google.android.gms.common.ConnectionResult; 
>  import com.google.android.gms.common.GooglePlayServicesUtil; 
>  import com.google.android.gms.common.api.GoogleApiClient; 
>  import com.google.android.gms.location.FusedLocationProviderApi; 
>  import com.google.android.gms.location.LocationListener; 
>  import com.google.android.gms.location.LocationRequest; 
>  import com.google.android.gms.location.LocationServices; 
>  import com.google.android.gms.maps.CameraUpdate; 
>  import com.google.android.gms.maps.CameraUpdateFactory; 
>  import com.google.android.gms.maps.GoogleMap; 
>  import com.google.android.gms.maps.MapView; 
>  import com.google.android.gms.maps.SupportMapFragment; 
>  import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
>  import com.google.android.gms.maps.model.CameraPosition; 
>  import com.google.android.gms.maps.model.LatLng; 
>  import com.google.android.gms.maps.model.Marker; 
>  import com.google.android.gms.maps.model.MarkerOptions; 
>  
>  import android.app.Dialog; import android.content.Intent; 
>  import android.location.Location; import android.os.Bundle; 
>  import android.support.v4.app.FragmentActivity; 
>  import android.util.Log; 
>  import android.view.Menu; import android.view.MenuItem; 
>  import android.widget.Toast; 
>  
>  public class Map extends FragmentActivity implements 
>  GoogleApiClient.ConnectionCallbacks, 
>  GoogleApiClient.OnConnectionFailedListener, LocationListener{ 
>  
>  private static final int GPS_ERRORDIALOG_REQUEST = 9001;  
>  GoogleMap mMap;  
>  //MapView vMap;  
>  Marker marker; 
>  
>  
>  private LocationRequest mLocationRequest; 
>   private GoogleApiClient mGoogleApiClient; 
>  //private MarkerOptions option1; 
>  
>        private static final float Zoom =12; public String TITLE = "Me";  private static final String TAG = "My map"; 
>  FusedLocationProviderApi mLocationClient; 
>  
>    int zoom=13; 
>    @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState); 
>     if (servicesOK()) { 
>       setContentView(R.layout.activity_map);   //vMap = (MapView)findViewById(R.id.mapview); 
>    //vMap.onCreate(savedInstanceState); 
>       if(initMap()){ 
>     Toast.makeText(this, "Ready to map!", Toast.LENGTH_SHORT).show(); 
>     
>     mGoogleApiClient = new GoogleApiClient.Builder(this) 
>      .addApi(LocationServices.API) 
>      .addConnectionCallbacks(this) 
>      .addOnConnectionFailedListener(this) 
>      .build(); 
>    
>     mGoogleApiClient.connect(); 
>    
>     new Thread(new Runnable() { 
>       public void run() { 
>        Vanlocation(); 
>       } 
>  
>       }).start(); 
>      
>      }else{ 
>     Toast.makeText(this, "Map not available !", Toast.LENGTH_SHORT).show();    } 
>      }  else{ 
>    
>     setContentView(R.layout.activity_main);   } } 
>  
>   public boolean onCreateOptionsMenu(Menu menu) {   // Inflate the 
>  menu; this adds items to the action bar if it is present. 
>   getMenuInflater().inflate(R.menu.main, menu); 
>     return true; }  public boolean servicesOK() {  int isAvailable = 
>  GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
>     if (isAvailable == ConnectionResult.SUCCESS) {   return true;  }  else if 
>  (GooglePlayServicesUtil.isUserRecoverableError(isAvailable)) { 
>    Dialog dialog = GooglePlayServicesUtil.getErrorDialog(isAvailable, 
>  this, GPS_ERRORDIALOG_REQUEST);   dialog.show();  }  else { 
>    Toast.makeText(this, "Can't connect to Google Play services", 
>  Toast.LENGTH_SHORT).show();  }  return false; 
>    } private void Vanlocation() { 
>     while(true){ 
>    try{    
>   
>     runOnUiThread(new Runnable() { 
>         
>      public void run() { 
>       
>      if(marker!=null){ 
>        marker.remove(); 
>       } 
>       // here i want those update value but i just get default values 
>       signIn ll = new signIn(); 
>       double lat=ll.lat; 
>       double lng=ll.lng; 
>      gotoLocation(lat , lng , zoom); 
>       
>       
>     
>     
>      } 
>     }); 
>     Thread.sleep(2500); 
>     
>    }catch(Exception e){ 
>     
>     System.out.println("Exception : " + e.getMessage()); 
>    } 
>    
>    } 
>    } private boolean initMap() {   if(mMap == null){   SupportMapFragment mapFrag = 
>      (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);  mMap = 
>  mapFrag.getMap();  mMap.setMyLocationEnabled(true);     
>   mMap.getUiSettings().setZoomControlsEnabled(true); 
>   mMap.getUiSettings().setMyLocationButtonEnabled(true);  // 
>  gotoLocation(lat , lng , zoom); 
>     } 
>     return (mMap != null); }  private void gotoLocation(double lat , double lng , float zoom){  LatLng ll = new LatLng(lat, lng); 
>   CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, zoom); 
>   mMap.animateCamera(update);   String t="van";   setMarker(t, 
>  ll.latitude, ll.longitude); }  @Override public boolean 
>  onOptionsItemSelected(MenuItem item) { 
>     return super.onOptionsItemSelected(item); } 
>  
>  
>  @Override 
>   protected void onStart() { 
>    super.onStart(); 
>    // Connect the client. 
>    mGoogleApiClient.connect(); 
>   } 
>  
>  @Override protected void onStop() {  super.onStop(); 
>   MapStateManager mgr = new MapStateManager(this); 
>   mgr.saveMapState(mMap, marker); 
>   
>   if(mGoogleApiClient.isConnected()) { 
>     mGoogleApiClient.disconnect(); 
>   } 
>    } 
>    @Override protected void onResume() {   super.onResume();  MapStateManager mgr = new MapStateManager(this); CameraPosition 
>  position =mgr.getSavedCameraPosition(mMap);  MarkerOptions m = 
>  mgr.getmarker(mMap); 
>  
>     if(position !=null){  CameraUpdate update = CameraUpdateFactory.newCameraPosition(position); 
>  mMap.moveCamera(update);  mMap.setMapType(mgr.getSavedMapType()); 
>   
>  setMarker(m.getTitle(),m.getPosition().latitude,m.getPosition().longitude); 
>  //mMap.addMarker(m); 
>      } } 
>  private void setMarker(String locality, double lat, double lng) { 
>  
>  
>   MarkerOptions options = new MarkerOptions() 
>    .title(locality+lat+lng)   .position(new LatLng(lat, lng)) 
>  //.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_mapmarker)); 
>    .icon(BitmapDescriptorFactory 
>    .defaultMarker(BitmapDescriptorFactory.HUE_BLUE));  marker = 
>  mMap.addMarker(options);   } 
>    @Override public void onConnectionFailed(ConnectionResult arg0) { 
>   
>    } 
>  
>  @Override public void onConnected(Bundle arg0) { 
>   
>     mLocationRequest = LocationRequest.create(); 
>   mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
>    mLocationRequest.setInterval(1000); // Update location every second 
>  
>    LocationServices.FusedLocationApi.requestLocationUpdates(
>      mGoogleApiClient, mLocationRequest, this); 
>    } 
>  @Override public void onConnectionSuspended(int arg0) {  
>  Log.i(TAG, "GoogleApiClient connection has been suspend"); 
>    } 
>  
>  @Override public void onLocationChanged(Location location) { 
>   //String msg ="Location: " + location.getLatitude() + "," + 
>  location.getLongitude();   //Toast.makeText(getApplicationContext(), 
>  msg, Toast.LENGTH_SHORT).show();   //LatLng ll = new 
>  LatLng(location.getLatitude(), location.getLongitude()); 
>   //CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, zoom); 
>   //mMap.animateCamera(update);  //String t="me";  //setMarker(t, 
>  ll.latitude, ll.longitude); } 
>  
>  
>  } 
+0

Я переписал сам вопрос, чтобы быть более понятным и очистке форматирование первого класса. Второй класс все испорчен, я рекомендую вам переформатировать его самостоятельно (больше людей будут читать и понимать ваш вопрос, если он отформатирован таким образом, который легче читать) – Jordan

ответ

1

я получил мою ошибку, что является статическим я должен использовать слово статического перед именем переменной

что я сделал Я создаю другой класс, который будет содержать статическую переменную, из которой все классы получат их.

public class gpsLatLng { 

public static double lat; 
public static double lng; 



} 

Но проблема здесь я получаю я получить один раз значения права снова при запуске цикла я получаю такое же значение не обновляется, но значение обновления периодически там

1

Если вы хотели бы удалите утечки памяти, вы также можете использовать LocalBroadCast для отправки сообщения другим действиям.

ReceiverActivity.java

Эта деятельность будет ждать любого события происходят по имени your-custom-event-name.

@Override 
public void onCreate(Bundle savedInstanceState) { 

    ... 

    // Register to receive messages. 
    // We are registering an observer (mMessageReceiver) to receive Intents 
    // with actions named "custom-event-name". 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
    new IntentFilter("your-custom-event-name")); 
} 

// Our handler for received Intents. This will be called whenever an Intent 
// with an action named "custom-event-name" is broadcasted. 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {@Override 
    public void onReceive(Context context, Intent intent) { 
     // Get extra data included in the Intent 
     String lat = intent.getStringExtra("lat"); 
     String lng = intent.getStringExtra("lat"); 
     Log.d("receiver", "Got lat : " + lat + " lgn : "+lng); 
    } 
}; 

@Override 
protected void onDestroy() { 
    // Unregister since the activity is about to be closed. 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    super.onDestroy(); 
} 

SenderActivity.java

Используйте следующие короткие кода для отправки любого типа данных в другой деятельности

Intent intent = new Intent("your-custom-event-name"); 
// You can also include some extra data. 
intent.putExtra("lat", "1"); 
intent.putExtra("lng", "5"); 
LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
+0

Я получаю lat lng, которые поступают с сервера, но только один раз на карте, как получить его снова и снова –

+0

Я не получил u. Я слабый, чтобы использовать обработчики, подобные этому, поэтому я понятия не имею, что вы опубликовали в моем отредактированном ответе, и объясните, кто будет обновляться снова и снова –

Смежные вопросы