Java 从其他静态类获取json对象的值
嗨,我的android项目是Java 从其他静态类获取json对象的值,java,android,json,static,Java,Android,Json,Static,嗨,我的android项目是 提供纬度和经度的GPSTracker.java类 从adress API获取JSON的RemoteFetch.java类处于静态 MainActivity.java 但获取json的url如下所示: 私有静态最终字符串打开\天气\地图\ API= “?“+”q=%s&“+”lat=“+”&lon=“+”&units=metric” 我的纬度和经度在GPSTracker中,但当我获取它们时,它不允许我获取这些值,因为它们不是静态格式 因此,一旦我将它们添加到我的o
- 提供纬度和经度的GPSTracker.java类
- 从adress API获取JSON的RemoteFetch.java类处于静态
- MainActivity.java 但获取json的url如下所示: 私有静态最终字符串打开\天气\地图\ API= “?“+”q=%s&“+”lat=“+”&lon=“+”&units=metric”
private void updateWeatherData(final String city){
new Thread(){
public void run(){
final JSONObject json = RemoteFetch.getJSON(MainActivity.this,city);
if(json == null){
handler.post(new Runnable(){
public void run(){
Toast.makeText(MainActivity.this.getApplicationContext(),R.string.place_not_found,Toast.LENGTH_LONG).show();
}
});
} else {
handler.post(new Runnable(){
public void run(){
renderWeather(json);
}
});
}
}
}.start();
}
在RemoteFetch.java中
private static final String OPEN_WEATHER_MAP_API =
"http://api.openweathermap.org/data/2.5/weather?" + "q=%s&" +"lat="+"&lon=" + "&units=metric";
public static JSONObject getJSON(Context context, String city){
try {
// gps.getLatitude();
URL url = new URL(String.format(OPEN_WEATHER_MAP_API, city));
HttpURLConnection connection =
(HttpURLConnection)url.openConnection();
connection.addRequestProperty("x-api-key",
context.getString(R.string.open_weather_maps_app_id));
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
StringBuffer json = new StringBuffer(1024);
String tmp="";
while((tmp=reader.readLine())!=null)
json.append(tmp).append("\n");
reader.close();
JSONObject data = new JSONObject(json.toString());
您试图访问的内容不在您的范围内(也称为上下文,但就语言而言,不要将其与类上下文混淆)。因此,您要么需要将变量作为参数传递给静态方法,要么创建方法和实例方法(删除静态变量) 编辑以作进一步解释: 在代码的某个部分(我想不是在粘贴的部分),您使用的是一个属性。在静态方法中,您无法看到该属性。 “静态”意味着不管它是什么,它都存在于类中,而非静态的东西属于该类的实例。虽然编写代码时代码似乎位于同一位置,但在运行时它不会位于同一位置。这就是为什么在静态上下文(即静态方法内部)上执行操作时,无法从实例中看到属性 所以你要么:
- 将其作为参数传递,就像对其他两个(上下文和城市)所做的一样
- 或者从toJSON方法中删除“static”关键字。如果它在静态上下文的其他地方使用,请小心,因为它可能会抛出一个编译错误,说明现在其他上下文无法看到该方法
我建议您回顾一下基本的OOP概念,因为您遇到的这个错误是一个非常基本的错误。您必须理解类和该类实例之间的区别。静态字段和方法连接到类本身,而不是它的实例 因为根据您的代码,
纬度和经度在GPSTracker中,不是静态的(这些是实例变量),所以您得到了错误
要解决您的问题,您需要实例化类的实例(创建对象),以便运行时可以为实例保留内存,并允许您访问实例变量(在您的情况下,纬度和经度在GPSTracker
)
在下面的代码中尝试访问GPSTracker中的纬度和经度
(例如在MainActivity的onCreate()
中)
GPSTracker obj=新的GPSTracker()代码>
要访问实例变量纬度和经度,请使用下面的obj
obj.纬度
或obj.经度
以上2点其他工作要考虑:
BR>
1.如果GPSTracker类不在文件包内,请确保将其导入文件中要使用的位置(例如mainacitity.java)。
2.如果GPSTracker类定义了一些其他的构造函数,您需要使用这些构造函数来创建一个对象。谢谢您的回答,我真的不知道怎么做,获取json的方法是这样的:public static JSONObject getJSON(Context Context,String city){try{URL URL=newurl(String.format(OPEN_WEATHER_MAP_API,city));因此,我必须在String city之后添加一些东西,比如double latitude?如果我删除了static,我就有了“Non static method”getJSON。。。“无法从静态上下文引用我编辑了我的响应,并提供了更详细的解释和链接扫描您是否将GPSTracker类get coordinates方法更改为静态?在RemoteFetch.java中提供纬度和经度的唯一方法是将GPSTracker GPSTracker=new GPSTracker(此);在onCreate中,但由于RemoteFetch不是一个活动……不管怎样,我需要一种方法能够将这些值(现在我已经得到它们)赋给json api url,因为只要我将“+纬度”添加到json url中,我就会得到“非静态字段无法从静态上下文引用”但是我不能使getJSON方法成为非静态的,因为我将得到以下错误:“错误:(147,53)错误:非静态方法getJSON(上下文,字符串)不能从静态上下文中引用”,在“final JSONObject json=RemoteFetch.getJSON(MainActivity.this,city);“这来自我的MainActivity.java