我是一名初级android开发人员,几乎完成了第一个大型项目的alpha版本。我认为我对Java有很好的了解,但是我不确定我是否正确组织了我的应用程序。
简短说明:
我在我的应用程序中使用凌空库来发送和接收来自服务器的数据。因此,我创建了一个类来管理服务器方法。在该类中,我为需要的每个服务器连接创建了很多静态方法(如本例所示):
public static void sendDataToServer(final Context context, final String data) {
StringRequest mStringRequest = new StringRequest(Request.Method.POST, URL_VERIFY, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// get response
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// get error response
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
// the POST parameters:
params.put(API_KEY, API_KEY_VALUE);
params.put(API_KEY_DATA, data);
return params;
}
};
Volley.newRequestQueue(context).add(mStringRequest);
}
所以在我的活动中,我这样称呼 MyServerClass.sendDataToServer(...)
我的问题是:
这样调用服务器方法可以吗?还是应该让它们成为实例方法并MyServerClass
在活动开始时实例化?我必须提及的是,该类中大约有5种方法。
我有另一个类似的类,带有检查数据准确性的方法。我是否还应该使它们成为实例方法并在我需要的活动中实例化它?
欢迎任何参考或建议。提前致谢!
不,在您的情况下,两种方式的结果相同…
唯一要提及的是,如果您也需要接收对请求的响应(可能在将来),则需要在类中添加一个Delegate / Callback /
Interface,以将结果直接返回给您调用活动实例…在那种情况下,最好创建一种“非静态实例方法”方式…但是您也可以在类中添加一个非静态方法,这样我就看不到任何反对的方法。
更新评论
好吧,例如,如果您想为ListView提供图像…在大多数情况下,您首先会请求一个带有ListView条目的JSONArray,其中包含指向位于远程服务器上的位图的链接…
如果您下载了异步图像并将其放入ListView行中的ImageView中(当用户滚动时),则图像加载时间可能会更长,并且ListView将在错误的位置显示图像。将需要一个Singleton模式,它将为您管理下载…使用类/静态方法将无法实现
问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以
尝试可视化和理解同步。 对同步块使用静态锁定对象(代码a)和非静态锁定对象(代码B)之间有什么区别 它在实际应用中有什么不同 一方会有哪些陷阱而另一方不会 确定使用哪一个的标准是什么 代码A 代码B 笔记 上面的代码显示了构造函数,但是您可以讨论静态方法和非静态方法中的行为是如何不同的。另外,在同步块修改静态成员变量时使用静态锁是否有利? 我已经看过了这个问题的答案,但是还不清楚不同的使用场景是什
问题内容: 如下所示,有两种简单的方法可以制作流式复印机(介绍Apache Commons或类似工具的栏)。我应该去哪一个?为什么? 与 问题答案: 我将使用非静态(实例)版本,并将其作为显式依赖项(使用setter)提供给消费者: 然后将其模拟用于单元测试是微不足道的,因此,消费者的测试不会与实现耦合。 换出功能很简单,例如:使用子类; 与依赖项注入系统配合良好。 编辑 为了回应(“有用!”)的
问题内容: 我正在使用JUnit编写一些测试用例。我需要初始化一些静态变量,这些变量将用于该类中的所有测试用例。 为此,我可以使用 静态初始化程序块或 静态方法 相互使用有什么好处? 问题答案: 或初始值设定项的语义非常不同。 静态初始化器由JVM而不是JUnit调用。如果在静态初始化程序中引发了异常,则测试框架可能无法捕获并报告该异常。此外,与该方法相比,静态初始化程序的调用时间没有明确定义。
问题内容: 在我的数据库的多个地方,开发人员使用了动态sql而不是静态sql。他们说这是为了提高性能。有人可以告诉我动态sql是否真的可以提高存储过程或plsql块的性能吗? 哪个执行速度更快,为什么? 1。 2。 问题答案: 您的示例代码非常简单,几乎没有什么区别,但是在那种情况下,静态版本最有可能执行得更好。 使用动态SQL来提高性能的主要原因是,当SQL语句发生重大变化时- 例如,您可以根据
问题内容: Java中的静态和非静态枚举有什么区别?两种用法是相同的。 正确吗 所有静态的都在启动时加载到内存中,非静态的则按需加载 ? 如果是,那么哪种方法更好?将某些数据始终保留在内存中还是每次使用服务器资源加载它们? 问题答案: 所有的都是有效的。如果您有嵌套的枚举,则它与相同。 所有类都是延迟加载的(枚举或其他),但是在加载时,它们会一次全部加载。也就是说,您不能加载一些常量,而不能加载其