繁体   English   中英

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

[英]How to pass data in static class/method from non 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. 以某种方式将两个双变量从非静态传递到静态

据我所知,最后一个是不可能的。 虽然在我的对象中我无法更改任何值,但其中没有.setValue()方法,所以我能做的大部分事情就是为 kmag(用于返回的那些变量)设置新值。

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

您始终可以从类外的任何地方调用静态方法(取决于访问修饰符)。 因此,您可以使用以下命令调用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 权限,您可以在调用静态方法之前调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM