2014-09-04 77 views
0

我使用Google排球库创建了一个图像加载器。我的问题是,我不知道如何为每个请求设置优先级。有人能帮我解决吗?下面显示的是代码。我应该在哪里设置优先级?设置排球优先级ImageLoader

Main Activity 

public class MainActivity extends ActionBarActivity { 

ListView list; 
ImageLoader mImageLoader; 
ImageAdapter imageAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    list = (ListView) findViewById(R.id.list); 

    mImageLoader = MyVolley.getInstance(this).getImageLoader(); 
    imageAdapter = new ImageAdapter(this, mImageLoader); 

    list.setAdapter(imageAdapter); 

} 

}

 Adapter class 

        public class ImageAdapter extends BaseAdapter { 

Context context; 
NetworkImageView nImgView; 
ImageLoader mImageLoader; 

public ImageAdapter(Context context, ImageLoader mImageLoader) { 
    this.context = context; 
    this.mImageLoader = mImageLoader; 

} 

@Override 
public int getCount() { 

    return ImageLinkArray.imageUrl.length; 
} 

@Override 
public Object getItem(int position) { 

    return null; 
} 

@Override 
public long getItemId(int position) { 

    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater mInflater = (LayoutInflater) context 
      .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.list_adapter_layout, 
       parent, false); 
    } 

    nImgView = (NetworkImageView) convertView 
      .findViewById(R.id.networkImageView); 

    nImgView.setAdjustViewBounds(true); 
    nImgView.setImageUrl(ImageLinkArray.imageUrl[position], mImageLoader); 
    return convertView; 
} 

}

 MyVolley class 


     public class MyVolley { 

private static MyVolley mVolleyInstance; 
private RequestQueue mRequestQueue; 
private ImageLoader mImageLoader; 
private static Context mContext; 

private MyVolley(Context context) { 
    mContext = context; 
    mRequestQueue = getRequestQueue(); 


    mImageLoader = new ImageLoader(mRequestQueue, 
      new ImageLoader.ImageCache() { 
       private final LruCache<String, Bitmap> cache = new LruCache<>(
         ImageLinkArray.imageUrl.length); 

       @Override 
       public void putBitmap(String url, Bitmap bitmap) { 
        // TODO Auto-generated method stub 
        cache.put(url, bitmap); 
       } 

       @Override 
       public Bitmap getBitmap(String url) { 
        // TODO Auto-generated method stub 
        return cache.get(url); 

       } 
      }); 

} 

public static synchronized MyVolley getInstance(Context context) { 
    if (mVolleyInstance == null) { 
     mVolleyInstance = new MyVolley(context); 
    } 
    return mVolleyInstance; 
} 

public RequestQueue getRequestQueue() { 
    if (mRequestQueue == null) { 
     // use the application context 
     mRequestQueue = Volley.newRequestQueue(mContext 
       .getApplicationContext()); 
    } 
    return mRequestQueue; 
} 

public <T> void addToRequestQueue(Request<T> req) { 

    getRequestQueue().add(req); 

} 

public ImageLoader getImageLoader() { 
    return mImageLoader; 
} 

}

+0

看看这个SO问题。它可以帮助你... http://stackoverflow.com/questions/17641108/setting-request-priority-volley – alpinescrambler 2014-09-04 06:16:33

+0

这是为字符串请求权?我正在使用图像请求 – 2014-09-04 06:25:15

+0

如果您在这里查看ImageRequest的源代码(https://android.googlesource.com/platform/frameworks/volley/+/master/src/com/android/volley/toolbox/ImageRequest.java ),您可以看到“默认”优先级较低。创建你自己的“ImageRequest”类(复制和粘贴),但将优先级设置为高... – alpinescrambler 2014-09-04 06:39:31

回答

2

试试这个代码

private Priority priority = Priority.HIGH; 

StringRequest strReq = new StringRequest(Method.GET, Const.URL_STRING_REQ, 
     new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       Log.d(TAG, response.toString()); 
       msgResponse.setText(response.toString()); 
       hideProgressDialog(); 

      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       hideProgressDialog(); 
      } 
     }) { 
    @Override 
    public Priority getPriority() { 
     return priority; 
    } 

}; 

androidhive

UPDATE

这里是另一个可行的example

设置Request你有优先一些代码片段添加到AppController类实例的

转换

public <T> void addToRequestQueue(Request<T> req) { 
    req.setTag(TAG); 
    getRequestQueue().add(req); 
} 

public <T> void addToRequestQueue(Request<T> req) { 
    req.setTag(TAG); 
    com.android.volley.Request.Priority pr = req.getPriority(); 
    pr = com.android.volley.Request.Priority.HIGH; 
    getRequestQueue().add(req); 
} 

,并使其可行通过调用方法与凌空一些额外的参数

+0

这是用于字符串请求的权利?我正在使用图片请求 – 2014-09-04 06:26:02

+0

看我的更新回答 – user3384985 2014-09-04 07:44:37

+0

其实请求 req是请求清单的权利?我如何设置一个特定的请求高? – 2014-09-04 08:03:57

0

退房ImageRequest类。它由Google开发人员为图片加载而创建,您只需要对其进行扩展并实现setPriority()。

// default priority 
private Priority mPriority = Priority.LOW; 

@Override 
public Priority getPriority() { 
    return mPriority; 
} 

// priority setter 
public void setPriority(Priority priority) { 
    mPriority = priority; 
} 

Priority距离Request类的ENUM。

stackoverflow

每个请求已经getPriority()方法继承来回Request类。在Volley RequestQueue中使用此方法来确定此队列中的请求优先级。

要使用此请求,只需重写getPriority(),并且必须在请求中实现setPriority()方法,如上所示。

+0

好吧,我已经创建了一个优先级类和扩展的imagerequest,并对以下代码进行了编码。罚款......但如何为每个请求设置优先级? – 2014-09-04 06:30:36

+0

您不必创建已经在Volley内部设计和使用的Piority类。每个请求都有从Request类继承的getPriority()。你只需要通过覆盖来使用它,并为你的请求实现setPriority()。 RequestQueue将通过调用getPriority()来读取此优先级。 – dasar 2014-09-04 06:33:45

+0

所以我应该在我的单身类本身实现上述代码?只是上面的代码会做? – 2014-09-04 06:36:12