建立一个Volley Singleton

时间:2017-12-22 12:19:09

标签: android android-volley

编辑:“重复问题”未提供此问题的适用答案。提供的方法并没有摆脱两个警告,只有一个。此外,我的问题包含第二部分,但也没有回答。

如果我根据官方教程建立一个Volley Singleton,

https://developer.android.com/training/volley/requestqueue.html#singleton

我收到了

的警告
private static VolleySingleton mInstance 

private static Context mContext 

说“不要将android上下文类放在静态字段中”。我已经阅读了有关此问题的其他Stackoverflow问题,但我发现没有解决方案可以消除此警告或实际解释此处发生的事情的答案。 是的我读过这篇文章: Warning: Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run) 但我无法提取适用的答案。我实际上需要改变什么才能打破即时运行或泄漏某些东西?

我不明白的另一件事是,为什么我必须在

使用<T>
public <T> void addToRequestQueue(Request <T> request)

我知道这代表Generics,但是如果我删除它们,它仍然有效。那是什么原因呢?

这是我的Volley Singleton,有人建议我在没有警告和冗余的情况下正确构建它:

public class VolleySingleton {
private static VolleySingleton mInstance;
private static Context mContext;
private RequestQueue mRequestQueue;

private VolleySingleton(Context context) {
    mContext = context;
    mRequestQueue = getRequestQueue();
}

public static synchronized VolleySingleton getInstance(Context context) {
    if (mInstance == null) {
        mInstance = new VolleySingleton(context);
    }

    return mInstance;
}

public RequestQueue getRequestQueue() {
    if (mRequestQueue == null) {
        mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext());
    }

    return mRequestQueue;
}

public <T> void addToRequestQueue(Request <T> request) {
    getRequestQueue().add(request);
}
}

1 个答案:

答案 0 :(得分:1)

为了清楚起见,这个 是重复的。我遵循了评论中链接的问题中提出的建议,并设法编写了您需要的课程,而没有在Android Studio上发现任何lint警告。这是一个片段:

public class VolleySingleton {

  private static VolleySingleton instance;
  private RequestQueue requestQueue;

  private VolleySingleton(Context context) {
    requestQueue = Volley.newRequestQueue(context.getApplicationContext());
  }

  public static VolleySingleton getInstance(Context context) {
    if (instance == null) {
      instance = new VolleySingleton(context);
    }
    return  instance;
  }

  public RequestQueue getRequestQueue(){
    return requestQueue;
  }
}