2014-09-04 76 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