2017-09-23 9 views
-1

私はサーバーからデータをロードしている静的クラスを取得し、後で配列に入り、通常のクラスに渡されるオブジェクトにパックします。私はパラメータを "距離をユーザーに"追加したいと計算するためにユーザーの場所が必要です。アイテムはすべて異なるJavaクラスにあります。 サーバレスポンスからオブジェクトへソートするstaticクラスのメソッド。静的でないクラス/メソッドでデータを渡す方法

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 

オブジェクトがLoaderクラスが動作を開始する単純なデータホルダー(ほんの例えば1つの項目)MainActivityで

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; 
    } 

LoaderManagerがあるように作成されます。また、ユーザーの経度/緯度を取得するLocationManagerがあります。これまでのところ私はいくつかのアイデアを手に入れましたが、どれも成功していませんでした。

  1. 静的クラス内の
  2. 検索場所
  3. は何とか私の知る限り、最後の1を知っているよう

非静的から静的に2重の変数を渡す配列リスト内の各オブジェクト要素の値を設定します不可能です。私のオブジェクトでは値を変更することはできませんでしたが、.setValue()というメソッドはありません。ほとんどの場合、kmag(戻り値に使用された変数)に新しい値を設定することができます。

最後に、私はLocationManagerを静的なクラスに移すことができませんでした。なぜなら、ユーザに許可を求める必要があり、すべてのメソッドが静的ではないことがわかったからです。だから私の質問は:私は行方不明の何かがありますか?たぶんそれを行うための他の簡単な方法があるのでしょうか、あるいは私はそれらの3つのうちの1つで失敗しましたか?

+1

「静的クラス」とは何ですか?関連するコードと実際のコードを表示することを検討してください。 –

+0

ようこそスタックオーバーフロー!良い質問をするので、良い答えを得るためにあなたを助けるために私たちの[SO質問チェックリスト](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)を確認してください。 –

+0

あなたの質問を編集してください、いくつかのコードを追加してください。それを理解するのは難しい! – Xenolion

答えて

0

クラスの外のどこからでも静的メソッドを呼び出すことができます(アクセス修飾子に依存します)。

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() { 
    ... 
    } 
} 

:メソッドは、このような同じクラスになっている場合は、静的メソッドから非静的メソッドを呼び出すことはできません

ItsClassName.extractEarthquakes(jsonValue); 

:だから、あなたがextractEarthquakes()メソッドを呼び出すことができますしかし、静的メソッドを同じクラスの非静的メソッドから呼び出すことはできます。

匿名ユーザー権限の場合、静的メソッドを呼び出す前に呼び出すことができます。

+0

静的メソッドextractEarthquakes()がQuakeオブジェクトのデータを提供するという重要なキーです。そして、何とか私は現在のデバイスの場所(非静的メソッドを提供する)をextractEarthquakes()にプッシュする必要があります。私はもっ​​と深く説明できるいくつかのプライベートメッセージシステムを持っていますか? –

関連する問題