-7
        public void WeatherInfo(){
    .......
    String weatherLocation = weatherLoc[1].toString();
........
}

基本上我有一个动态字符串,它位于一个名为 WeatherInfo 的空域中。

但我需要从另一个 void 获取 weatherLocation 字符串,就像这样

    public void WeatherChecker(){

    YahooWeatherUtils yahooWeatherUtils = YahooWeatherUtils.getInstance();
  yahooWeatherUtils.queryYahooWeather(getApplicationContext(), weatherLocation, this);
}

因此我需要能够从这个空白处访问weatherLocation。

我该怎么做呢?

4

6 回答 6

4

这是一个范围问题。您已经声明了一个局部变量,因此它只能在本地访问。如果您希望在方法之外访问变量,请传递引用或全局声明它。

public void method1()
{
   String str = "Hello";
   // str is only accessible inside method1 
}


String str2 = "hello there"; 
// str2 is accessible anywhere in the class.

编辑

正如所指出的,您应该查看Java 命名约定

于 2013-07-08T16:05:39.043 回答
2

您可以执行以下任何操作

1)将字符串作为参数传递并设置值

或者

2)使用成员变量并使用getter来获取变量

于 2013-07-08T16:05:14.260 回答
2

您需要将其作为参数传递或创建“全局变量”

IE 您可以执行以下任一操作...

public void methodOne(String string){
    System.out.println(string);
}
public void methodTwo(){
    String string = "This string will be printed by methodOne";
    methodOne(string);
}

或(更好的解决方案)

在类声明下创建一个全局变量...

public class ThisIsAClass {

String string; //accessible globally
....
//way down the class

    public void methodOne(){
        System.out.println(string);
    }
    public void methodTwo(){
        String string = "This string will be printed by methodOne"; //edit the string here
        methodOne();
    }

如果您有任何问题,请告诉我。当然,您将不得不String string;相应地进行更改,但对于任何变量,它都是相同的概念。

您说您的“句子”是在其中一种方法中创建的,并且在您全局声明它时尚未创建。您需要做的就是全局创建它,String weatherLocation = null;然后在需要时进行设置。我认为它是你的例子weatherInfo()

public void WeatherInfo(){
    weatherLocation = weatherLoc[1].toString();
}

我们只是编辑我们在全局范围内创建的,而不是创建一个新的。

-亨利

于 2013-07-08T16:07:03.493 回答
0

我不是 100% 确定您要完成什么,或者哪些函数正在调用其他函数……但是您可以将weatherLocation其作为参数传入。这是你想要的?

public void WeatherChecker(String weatherLocation){
  YahooWeatherUtils yahooWeatherUtils = YahooWeatherUtils.getInstance();
  yahooWeatherUtils.queryYahooWeather(getApplicationContext(), weatherLocation, this);
}
于 2013-07-08T16:04:29.240 回答
0

您不能直接这样做,因为方法中的局部变量仅存在于它们的声明到块的末尾(最迟是方法的结尾)。

如果您需要在多个方法中访问一个变量,您可以将其设为类变量(或字段)。为字段分配值后,它会保存为对象的状态,以后可以随时访问和修改。这当然意味着你必须先设置它。

于 2013-07-08T16:05:54.880 回答
0

也许尝试在您尝试使用它的方法范围内将您的 String 声明得更高。您必须确保首先调用 Wea​​therInfo()(可能在构造函数中)以便它被初始化,否则您会得到奇怪的结果。

public Class {
String weatherLocation = null;

public void WeatherInfo(){
    ........
    weatherLocation = weatherLoc[1].toString();
    ........
}
public void WeatherChecker(){
    YahooWeatherUtils yahooWeatherUtils = YahooWeatherUtils.getInstance();
    yahooWeatherUtils.queryYahooWeather(getApplicationContext(), weatherLocation, this);    
}
}
于 2013-07-08T16:09:41.747 回答