Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用java singleton类执行常见任务_Java_Android - Fatal编程技术网

在Android中使用java singleton类执行常见任务

在Android中使用java singleton类执行常见任务,java,android,Java,Android,在我的android应用程序中,有一些常见的任务,例如获取服务器的IP以进行API调用——为此,我创建了一个singleton类 public class MiscFunctions extends Activity { private static MiscFunctions ourInstance = new MiscFunctions(); public static MiscFunctions getInstance() { return ourInstance; } pr

在我的android应用程序中,有一些常见的任务,例如获取服务器的IP以进行API调用——为此,我创建了一个singleton类

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类并实例化该类以调用活动中的方法

哪种方法更有效、更稳健


如有任何专家意见,将不胜感激。提前感谢

我建议您使用静态方法,如:

public static String getServerIp(Context ct) {
  ....
}

这里还有另一个问题

我只在需要维护一些全局状态的情况下使用单例。例如,一个可以从数据库中写入和获取数据的DAO只需要一个数据库连接对象,尽管在本例中,我可以在每次需要时调用
database.getConnection()
,但通过在保存连接的类中使用单个对象,它将加快一点速度,并且更易于调试。否则,静态方法是好的

单例是一种模式,你无法测试它是否真的是单例。正如我所看到的,您的单例也不是线程安全的。

如果你希望你的IP地址是安全的,那么不要把它放在你的资产目录中。任何人都可以通过将
.apk
更改为
.zip
来查看它。 我认为您应该创建一个类并创建一个静态的最终字符串,如:

public class Constants {
    public static final String MY_IP = "your file content";
}
我认为你只是在读一个文本文件,而不是一行文本

和访问IP一样

String ip = Constants.MY_IP;

没有必要扩展activity类并使您的方法成为静态的,就是这样。