我有许多AsyncTasks,其中所有doInBackground
方法都执行此操作:
Socket s = new Socket("12.345.67.89", 5555);
我想设置一个他们可以访问的全局变量,所以当我更改位置/ IP时,我不必梳理所有类文件并更改每个IP地址。
在我的脑海中,我想创建一个名为GlobalInfo
的类,其中包含我可能需要共享的所有(静态?)变量,然后在每个doInBackground
调用中:
GlobalInfo derp = new GlobalInfo();
GlobalInfo.getIp();
但是,除了每次进行实例化新课程之外,还有更好的方法吗?
答案 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)
这样可以将配置设置与代码分开。