2014-09-04 2 views
0

Я создал загрузчик изображений с помощью Google volley library. Моя проблема в том, что я не знаю, как установить приоритет для каждого запроса. Может ли кто-нибудь помочь мне с тем же? Ниже показан код. Где я должен установить приоритет?Установка приоритета для Volley 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

ознакомьтесь с этим ВОПРОСОМ. Это может помочь вам ... http://stackoverflow.com/questions/17641108/setting-request-priority-volley – alpinescrambler

+0

Это для запроса строки правильно? я использую запрос изображения –

+0

Если вы посмотрите исходный код ImageRequest здесь (https://android.googlesource.com/platform/frameworks/volley/+/master/src/com/android/volley/toolbox/ImageRequest.java), вы можете видеть, что приоритет «по умолчанию» низкий. Создайте свой собственный класс «ImageRequest» (скопируйте и вставьте), но установите приоритет на высокий ... – alpinescrambler

ответ

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

Это для правильного запроса строки? я использую запрос изображения –

+0

см. мой ответ на вопрос – user3384985

+0

На самом деле Запрос req - это список запросов? Как я могу задать конкретный запрос высокой ?? –

0

Заканчивать ImageRequest класса от Volley. Он создан для загрузки изображений разработчиками 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 является ENUM из Request класса.

из stackoverflow

Каждый запрос getPriority() метод наследуется сюда класса Request. Этот метод используется во Volley RequestQueue для определения приоритета запроса внутри этой очереди.

Для использования этого запроса просто нужно переопределить getPriority(), и вы должны реализовать внутренний запрос setPriority(), как показано выше.

+0

. Я создал класс приоритета и расширил imagerequest и закодировал следующий. отлично ... но как установить приоритет для каждого запроса? –

+0

Вам не нужно создавать класс Piority, который уже разработан и используется внутри Volley. Каждый запрос имеет getPriority(), унаследованный от класса Request. Вам просто нужно использовать его, переопределив и реализуя setPriority() для вашего запроса. RequestQueue прочитает этот приоритет, вызвав getPriority(). – dasar

+0

Итак, должен ли я реализовать вышеуказанный код в моем одиночном классе? просто код выше? –

Смежные вопросы