在我的Android应用程序中,有一些常见的任务,例如获取服务器的IP以进行API调用 - 为此我创建了一个单例类
public class MiscFunctions extends Activity {
private static MiscFunctions ourInstance = new MiscFunctions();
public static MiscFunctions getInstance() {
return ourInstance;
}
private MiscFunctions() {
}
/*
method to return the ip of main server.
The ip is written in plain text in file server_url.txt in assets folder
*/
public String getServerIP(Context c) {
try {
AssetManager am = c.getAssets();
InputStream is = am.open("server_url.txt");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
return new String(buffer);
}
catch (IOException e) {
System.out.println("IO Error while accesssing server_url.txt");
e.printStackTrace();
return "Failed to open server_url.txt";
}
catch (NullPointerException e) {
System.out.println("NullPointer exception error while accessrng server_url.txt");
e.printStackTrace();
return "Failed to open server_url.txt";
}
catch (Exception e) {
System.out.println("Unknown exception error while accessrng server_url.txt");
e.printStackTrace();
return "Failed to open server_url.txt";
}
}
}
然后我会在这样的各种活动中使用这个课程:
Context c = this.getApplicationContext();
server_ip = MiscFunctions.getInstance().getServerIP(c);
我只是想知道这是否是正确的做法?或者我应该使用常规java类并实例化该类以调用活动中的方法。
哪种方法更有效,更强大?
任何专家评论都将受到高度赞赏。提前致谢
答案 0 :(得分:1)
Singleton是一种模式,你无法测试它是否真的是单身。因为我看到你的单身人士也不是线程安全的。 You can refer here
如果您希望IP地址安全,请不要将其放在资产目录中。任何人都可以通过将您的.apk
更改为.zip
来查看。
我认为你应该创建一个类并创建一个静态的最终String,如:
public class Constants {
public static final String MY_IP = "your file content";
}
我认为你只是阅读一个文本文件,几乎没有一行文字。
并像访问IP一样。
String ip = Constants.MY_IP;
答案 1 :(得分:0)
我只使用单身,以防它需要维持一些全局状态。例如,可以从数据库写入和获取数据的DAO只需要一个数据库连接对象,尽管在这种情况下我可以在每次需要时调用Database.getConnection()
,但是通过在类中使用保存连接的单个对象,它会加快一点,也更容易调试。否则,静态方法是好的。