2017-09-23 5 views
-1

Ich habe statische Klasse, die Daten vom Server lädt und packt es in Objekte, die später in Array geht und an normale Klasse übergeben werden. Ich möchte den Parameter "distance to user" hinzufügen und es erfordert Benutzer Ort zu berechnen. Alle Elemente sind in verschiedenen Java-Klassen. Methode aus der statischen Klasse, die die Objekte von der Serverantwort zum Objekt sortiert.Wie Daten in statischer Klasse/Methode von nicht statischen übergeben?

public static List<Quake> extractEarthquakes(String earthquakeJSON) { 
    if (TextUtils.isEmpty(earthquakeJSON)) { 
     return null; 
    } 
    List<Quake> earthquakes = new ArrayList<>(); 
JSONObject jsonObj = new JSONObject(earthquakeJSON); 
     JSONArray features = jsonObj.getJSONArray("features"); 
     for (int i = 0; i < features.length(); i++) { 
      double distance = 0; 
      JSONObject currentEarthquake = features.getJSONObject(i); 
      JSONObject properties = currentEarthquake.getJSONObject("properties"); 
      double mag = properties.getDouble("mag"); 
      String location = properties.getString("place"); 
      String date = properties.getString("time"); 
      String url = properties.getString("url"); 
      int felt = 0; 
      if(!properties.isNull("felt")) { 
       felt = properties.getInt("felt"); 
      } 
      JSONObject geometry = currentEarthquake.getJSONObject("geometry"); 
      JSONArray coordinates = geometry.getJSONArray("coordinates"); 
      double longitude = coordinates.getDouble(0); 
      double latitude = coordinates.getDouble(1); 
      int depth = coordinates.getInt(2); 
      Quake earthquake = new Quake(mag, location, date, url, felt, longitude, latitude, depth, distance); 
      earthquakes.add(earthquake); 
     } 
    } 
    return earthquakes; 
}r 

Objekt wird als einfacher Datenhalter (ein Element nur zum Beispiel) erstellt

public class Quake { 
    private double kmag; 
    //and others 

    public Quake(double mag, String location, String date, String url, int felt, double longitude, double latitude, int depth, double distance){ 
    kmag = mag; 
    //and others 

    public double getMag() { 
    return kmag; 
    } 

In MainActivity gibt es LoaderManager die Loader-Klasse beginnt zu arbeiten. Auch gibt es LocationManager, der Benutzer Längengrad/Breitengrad erhält. Bisher hatte ich nur wenige Ideen, wie das geht, aber keiner von ihnen hat funktioniert.

  1. auf dem eingestellten Wert für jedes Objekt Element in Array-Liste
  2. Fundort innerhalb statischer Klasse
  3. aus irgendwie zwei Doppeln Variablen in statischen passiert nicht statisch

Soweit ich letzte kennen ist unmöglich. Während ich in meinem Objekt keinen Wert ändern konnte, gibt es keine .setValue() Methode, so dass ich höchstens einen neuen Wert für kmag (die Variablen, die für die Rückgabe verwendet werden) festlegen konnte.

Schließlich konnte ich meinen LocationManager nicht in die statische Klasse übertragen, da er die Benutzer um Erlaubnis fragen muss und im Beispiel, dass alle Methoden nicht statisch waren. Meine Frage ist also: Gibt es etwas, das ich vermisse? Vielleicht gibt es einen anderen, einfacheren Weg das zu tun, oder ich habe gerade in einem dieser 3 versagt?

+1

Was ist eine "statische Klasse"? Bitte beachten Sie, dass Sie zutreffenden und echten Code zeigen. –

+0

Willkommen bei Stack Overflow! Bitte lesen Sie unsere [SO Fragen-Checkliste] (http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist), um Ihnen zu helfen, eine gute Frage zu stellen und somit eine gute Antwort zu erhalten. –

+0

Bearbeiten Sie Ihre Frage, um es klarzustellen, fügen Sie etwas Code hinzu. Es ist schwer zu verstehen! – Xenolion

Antwort

0

Sie können eine statische Methode immer von einer beliebigen Stelle außerhalb der Klasse aufrufen (abhängig vom Zugriffsmodifizierer). So können Sie die extractEarthquakes() Methode mit rufen:

ItsClassName.extractEarthquakes(jsonValue); 

Sie nicht nicht-statische Methode aus statischen Methode aufrufen kann, wenn die Methoden in der gleichen Klasse ist wie folgt aus:

public class TestClass { 

    public static List<Quake> extractEarthquakes(String earthquakeJSON) { 
    ... 

    // This will give an error: 
    // Non-static method 'callExtract()` cannot be referenced from a static context 
    doSomething(); 
    } 

    public void doSomething() { 
    ... 
    } 
} 

Aber Sie können die statische Methode von einer nicht statischen Methode in derselben Klasse aufrufen.

Sie können die Berechtigung ask users aufrufen, bevor Sie die statische Methode aufrufen.

+0

Der Schlüssel war hier, dass die statische Methode extractEarthquakes() Daten für das Quake-Objekt liefert. Und irgendwie muss ich den aktuellen Gerätestandort (nicht-statische Methode bietet das) in extractEarthquakes() schieben. Hat stackoverflow ein privates Nachrichtensystem, in dem ich tiefer erklären könnte? –

Verwandte Themen