Android получает данные из другого класса - PullRequest
1 голос
/ 07 июня 2011

Я пытался решить эту проблему в другом посте, но безуспешно.Вот что я хочу сделать: когда пользователь нажимает на gpsbtn, он извлекает метод gps.printLocation, чтобы получить long / lat.Я хочу автоматически заполнить текст редактирования, но я думаю, что смог бы выяснить, как это сделать с помощью быстрого поиска в Google.Так что, если бы я мог просто сохранить координаты в переменной, это было бы все, что я хочу, но мой мозг не работает.Полный код:

public class Location extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Full Screen
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.location);

        // Go button
        Button gobtn = (Button) findViewById(R.id.gobtn);
        final EditText Zipcodeinput = (EditText) findViewById(R.id.Zipcode);
        gobtn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                // Edit text validation field
                Pattern pattern = Pattern.compile("[0-9][0-9][0-9][0-9][0-9]"); // string needs 5 digits
                // argument to matcher is string to validate
                Matcher matcher = pattern.matcher(Zipcodeinput.getText()
                        .toString());
                if (!matcher.matches()) // on Success
                {
                    // invalid
                    // pop up ERROR message
                    Toast.makeText(getBaseContext(), " Invalid Input ",
                            Toast.LENGTH_LONG).show();

                } else {
                    // validation successful
                    // Change to Listings Page
                    Intent filterIntent = new Intent(view.getContext(),
                            Listings.class);
                    startActivityForResult(filterIntent, 0);
                }
            }
        });

        // button to get to list view
        Button gpsbtn = (Button) findViewById(R.id.gps); // temp use of gps
                                                            // button
        gpsbtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                // Toast.makeText(getApplicationContext(), "Please wait...",
                // Toast.LENGTH_LONG).show();
                Intent gpsIntent = new Intent(view.getContext(), gps.class);
                startActivityForResult(gpsIntent, 0);

            }

        });

    }
}

Класс, из которого я хочу получить информацию:

public class gps extends Activity implements LocationListener {

    //private static final String[] S = { "Out of Service",
            //"Temporarily Unavailable", "Available" };

    private TextView output2;
    private LocationManager locationManager;
    private String bestProvider;
    double latitude,longitude;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gps);
        try {   
        // Get the output UI
        //output = (TextView) findViewById(R.id.output);
        output2 = (TextView) findViewById(R.id.output2);

        // Get the location manager
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        // List all providers:
        List<String> providers = locationManager.getAllProviders();
        for (String provider : providers) {
            printProvider(provider);
        }

        Criteria criteria = new Criteria();
        bestProvider = locationManager.getBestProvider(criteria, false);
        //output.append("\n\nBEST Provider:\n");
        printProvider(bestProvider);

        //output.append("\n\nLocations (starting with last known):");
        Location location = locationManager.getLastKnownLocation(bestProvider);
        printLocation(location);
        }
        catch (Exception e)
        {
            Toast.makeText(getBaseContext(), "Error Getting GPS" , Toast.LENGTH_LONG);
        }

    }

    /** Register for the updates when Activity is in foreground */
    @Override
    protected void onResume() {
        super.onResume();

    }

    /** Stop the updates when Activity is paused */
    @Override
    protected void onPause() {
        super.onPause();
        locationManager.removeUpdates(this);
    }

    public void onLocationChanged(Location location) {
        printLocation(location);
    }

    public void onProviderDisabled(String provider) {
        // let okProvider be bestProvider
        // re-register for updates
    }

    public void onProviderEnabled(String provider) {
        // is provider better than bestProvider?
        // is yes, bestProvider = provider
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        //output.append("\n\nProvider Status Changed: " + provider + ", Status="
            //  + S[status] + ", Extras=" + extras);
    }

    private void printProvider(String provider) {
        //LocationProvider info = locationManager.getProvider(provider);
        //output.append(info.toString() + "\n\n");
    }





    //PRINTS the long and lat. Take out round before release

    private void printLocation(Location location) {
        output2.append("Lat:"+location.getLatitude()+"\nLong: "+location.getLongitude());
        latitude = Math.round(location.getLatitude());
        longitude = Math.round(location.getLongitude());

         Toast.makeText(getBaseContext(), "Lat: " + latitude + "| Long: " + longitude, Toast.LENGTH_LONG).show();



    }

Я так потерян!Спасибо!

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Вы можете сохранить координаты в Shared Prefs, которые доступны для всех классов в приложении. Shared Prefs

Или вы можете создать «Глобальный» класс, который выходит из класса Application, и написать свои собственные методы setter и getter для доступа к данным, хранящимся в этом Global классе.

public class MyApp extends Application {

      public String string1;

      public String getState(){
        return string1;
      }
      public void setState(input){
        this.string1 = input;
      }
}

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

MyApp appState = ((MyApp)getApplicationContext());
String x = appState.getState();
appState.setState(x);
1 голос
/ 07 июня 2011

Не проверено, но я бы подумал об использовании общих настроек:

public static final String USER_LATITUDE = "user.lat";
public static final String USER_LONGTITUDE = "user.long";
public static final String USER_SHARED_PREFS = "user.prefs";

private void printLocation(Location location) {

    SharedPreferences prefs = getSharedPreferences(USER_SHARED_PREFS, MODE_PRIVATE);
    Editor editor = prefs.edit();
    long latitude = Math.round(location.getLatitude());
    long longitude = Math.round(location.getLongitude());

    editor.putLong(USER_LATITUDE, latitude).commit();
    editor.putLong(USER_LONGTITUDE, longitude).commit();

}

private void doSTuff(){
    SharedPreferences prefs = getSharedPreferences(USER_SHARED_PREFS, MODE_PRIVATE);
    prefs.getLong(USER_LATITUDE, 0);
    prefs.getLong(USER_LONGTITUDE, 0);
}

Экземпляры общих настроек являются атомарными, поэтому, как только вы сделаете коммит в редакторе, изменения могут быть прочитаны экземпляром sharedPreferences в вашем классе читателя.

Возможные проблемы, значения по умолчанию для местоположения, нет объекта местоположения, доступного в sharedPreferences, только long и lat, означающие, что вы не можете получить точность или время считывания местоположения.

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