在AsyncTask中为IP地址设置全局变量的更好方法是什么?

时间:2013-02-13 11:15:02

标签: java android android-asynctask

我有许多AsyncTasks,其中所有doInBackground方法都执行此操作:

Socket s = new Socket("12.345.67.89", 5555);    

我想设置一个他们可以访问的全局变量,所以当我更改位置/ IP时,我不必梳理所有类文件并更改每个IP地址。

在我的脑海中,我想创建一个名为GlobalInfo的类,其中包含我可能需要共享的所有(静态?)变量,然后在每个doInBackground调用中:

GlobalInfo derp = new GlobalInfo();
GlobalInfo.getIp();

但是,除了每次进行实例化新课程之外,还有更好的方法吗?

5 个答案:

答案 0 :(得分:2)

如果您需要这样的东西,我建议您创建一个实用工具类(如您所写),例如:

public static final HOST_ADDRESS = "12.345.67.89";

然后在你的所有任务(甚至是所有类)中你都可以使用它(不需要实例化):

MyUtilityClass.HOST_ADDRESS

干杯,

答案 1 :(得分:0)

制作静态课程

public class GlobalInfo {
    public static final String IP_ADDRESS = "123.123.123.123";

}

并通过

访问它
 Socket s = new Socket(GlobalInfo.IP_ADDRESS, 5555); 

import static GlobalInfo.*;

Socket s = new Socket(IP_ADDRESS, 5555);

因为静态创建只发生一次。

答案 2 :(得分:0)

您可以创建一个常量类,并使该类的成员保持静态,这样您就不必每次都创建一个新对象。

类似的东西:

public class C {
    public static final String IP = "12.345.67.89";
    public static final int PORT = 5555;
}

然后使用以下方式访问它:

Socket s = new Socket(C.IP, C.PORT);    

答案 3 :(得分:0)

只需使用全局静态常量:

public class GlobalInfo {
    public static final String IP_ADDRESS = "12.345.67.89";
    public static final int PORT = 5555;

    private GlobalInfo(){}
}

然后,您的代码变为:

Socket s = new Socket(GlobalInfo.IP_ADDRESS, GlobalInfo.PORT);

答案 4 :(得分:0)

所有其他答案都是正确的,但我个人选择使用内容

创建XML文件
<string name="server_ip">192.168.1.100</string>

然后简单地做

getString(R.string.server_ip)

这样可以将配置设置与代码分开。