嗨,我的android项目是
>
一个MainActivity.java但是获取json的url是这样的:
私有静态最终字符串OPEN_WEATHER_MAP_API="http://api.openweathermap.org/data/2.5/weather?"q=%s
我的纬度和经度在GPSTracker中,但当我获取它们时,它不允许我获取这些值,因为它们不是静态格式。。。
因此,当我将它们添加到我的openweatherapi url中时,我就出现了错误:
"不能从静态上下文引用非静态字段"。
有没有办法将string/int格式转换为静态格式??
如果你需要更多的信息,请告诉我。
这里有一些代码
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();
}
在远程etch.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方法中删除“静态”关键字。如果它在静态上下文的其他地方被使用,要小心,因为它可能会抛出一个编译错误,说现在其他上下文看不到这个方法了!
另外,你可能想看看Gsonhttps://sites.google.com/site/gson/gson-user-guide
对错误的SO响应,阅读并尝试理解它的工作原理:"非静态方法不能从静态上下文中引用"错误
还有一些关于班级成员的文件http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
我建议您回顾一下基本的OOP概念,因为您遇到的这个错误是一个非常基本的错误。
您必须理解类和该类的实例之间的区别。静态字段和方法连接到类本身,而不是它的实例。
因为根据你的代码,纬度和经度在GPSTracker中,
不是静态的(这些是实例变量),所以你得到了错误。
为了解决问题,您需要实例化类的实例(创建一个对象),以便运行时可以为实例保留内存,并允许您访问实例变量(在您的情况下,
纬度和经度在GPSTracker
中)。
尝试下面的代码,你想访问
纬度和经度
中的GPSTracker(在onCreate()
中的MainActive为例)
GPSTracker obj=new GPSTracker();
要访问实例变量纬度和经度,请使用
obj
如下obj。纬度
或obj。经度
。
以上2点需要考虑的事项:
GPSTracker类导入到要使用它的文件中(例如mainacitity.java)2。如果GPSTracker类定义了其他一些构造函数,您需要在创建对象时调用该构造函数。
BR> 1。如果文件不在文件包内,请确保将
我有一个名为AnimalsData的文件,它有一个由数组组成的对象。数组由一个对象和另一个数组组成。它看起来像这样: 我的HTML文件如下所示: 我正试图获取的值的类名对象从动画类数组。我一直在使用以下两个stackoverflow页面作为指南: 访问JSON数组中的对象和访问/处理(嵌套)对象、数组或JSON 我有另一个javascript文件,其中包含以下内容: 编辑我将for in循环中的"
问题内容: 我正在做作业,遇到了一些错误。在一个类中,我有此方法: 现在,我收到错误消息“无法从静态上下文中引用非静态方法…”,因此我将getPoints()设置为静态方法,并将变量也设置为静态,并且它可以正常工作。但是在另一种打印对象的方法中,它不起作用(我相信是由于static关键字)。 所以我的问题是,有没有一种方法可以在不创建第二个Class实例的情况下调用方法?这是我所拥有的一般构想代码
现在我得到错误“non-static method conly be referenced from a static context...”,所以我将getPoints()设置为静态方法,同时将变量设置为静态,这样就可以工作了。但是在另一个打印对象的方法中,它就不起作用了(我相信这是因为static关键字的缘故)。 那么我的问题是,在所有这些之后,有没有一种方法可以调用一个方法,而不创建第二个类
我有两个json对象,请不要是字符串,我想将它们组合成一个json对象,如下所示。 两个对象: 预期结果: 有没有一种优雅的方法可以做到这一点?我的意思是,不提取每支笔和每本书的值,然后使用以下方法将它们重新插入包 我正在使用org。科德豪斯。抛弃json。JSONObject,如果需要该信息。
我正在尝试一个为超类学生提供2个私有成员名和ID的练习。提供了两个方法,即public int ShowID()和public String ShowName(),后者将返回两个值。 子类还包含2个私有成员类和2个来自超类私有成员的类号 我的任务是为他们写一个数组并打印出来,创建数组调用std[]后,我不能打印name和ID的值,因为它是私有成员,也不能从superclass方法中获取值,因为它是
} 我想从这个json对象中获取值。 我在下面试过了,但没有成功。