如何从静态类/方法中传递数据?

时间:2017-09-23 21:19:42

标签: java android static

我得到了静态类,它从服务器加载数据并将其打包到后来进入数组并传递给普通类的对象中。我想添加参数“距离用户”,它需要用户位置来计算。所有项目都在不同的java类中。 静态类中的方法,用于将服务器响应中的内容排序到对象。

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

将对象创建为简单数据持有者(例如,仅一个项目)

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

在MainActivity中有LoaderManager启动加载器类工作。还有LocationManager,它获取用户的经度/纬度。到目前为止,我几乎没有想法如何做到这一点,但没有一个有效。

  1. 为数组列表中的每个对象元素设置值
  2. 在静态类中找到位置
  3. 以某种方式将两个双变量传递给静态非静态
  4. 据我所知,最后一个是不可能的。虽然在我的对象中我无法更改任何值,但它中没有.setValue()方法,所以我可以做的大部分是为kmag设置新值(那些用于返回的变量)。

    最后,我无法将我的LocationManager转移到静态类中,因为它需要询问用户权限,例如我发现所有方法都不是静态的。所以我的问题是:有什么我想念的吗?也许有其他更简单的方法可以做到这一点,或者我只是在其中一个中失败了?

1 个答案:

答案 0 :(得分:0)

您始终可以从类外的任何位置调用静态方法(取决于访问修饰符)。因此,您可以使用:

调用extractEarthquakes()方法
ItsClassName.extractEarthquakes(jsonValue);

如果方法属于同一类,则无法从静态方法调用非静态方法:

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

但您可以在同一个类中使用非静态方法调用静态方法。

对于ask users权限,您可以在调用静态方法之前调用它。