Attempt to invoke virtual method com.android.volley.Request

314
06 октября 2021, 05:30

Я новичок в андроид программирование и столкнулся вот с такой проблемой который сам не смог решить. Полный текст ошибки выглядит так:

10-28 10:41:38.752 7392-7392/com.jumagames.birdseggs E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.jumagames.birdseggs, PID: 7392
    java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.Request com.android.volley.RequestQueue.add(com.android.volley.Request)' on a null object reference
        at com.android.volley.toolbox.ImageLoader.get(ImageLoader.java:255)
        at com.android.volley.toolbox.ImageLoader.get(ImageLoader.java:193)
        at com.android.volley.toolbox.ImageLoader.get(ImageLoader.java:184)
        at news.CardAdapter.onBindViewHolder(CardAdapter.java:91)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
        at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1858)
        at androidx.recyclerview.widget.RecyclerView$1.run(RecyclerView.java:407)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920)
        at android.view.Choreographer.doCallbacks(Choreographer.java:695)
        at android.view.Choreographer.doFrame(Choreographer.java:628)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:158)
        at android.app.ActivityThread.main(ActivityThread.java:7224)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
10-28 10:43:01.427 7392-7392/com.jumagames.birdseggs I/Process: Sending signal. PID: 7392 SIG: 9

Вот так вызывается метод(ошибка на 7-й строке):

    public void onBindViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder viewHolder, int i) {
        if (viewHolder instanceof ViewHolder) {
            News news2 = this.Newz.get(i);
            ViewHolder viewHolder2 = (ViewHolder) viewHolder;
            if (viewHolder2.news_image.getDrawable() == null && news2.getImage() != null) {
                this.imageLoader = ImageVolleyRequest.getInstance(this.context).getImageLoader();
                this.imageLoader.get(news2.getImage(), ImageLoader.getImageListener(viewHolder2.news_image, R.mipmap.ic_launcher, R.drawable.ic_help));
            }
            viewHolder2.news_image.setImageUrl(news2.getImage(), this.imageLoader);
            viewHolder2.txtTitle.setText(news2.getTitle());
            viewHolder2.txtDate.setText(news2.getDate());
            viewHolder2.txtShortText.setText(Html.fromHtml(news2.getShort_text()));
            viewHolder2.txtId.setText(news2.getId());
            return;
        }
        ((ProgressViewHolder) viewHolder).progressBar.setIndeterminate(true);
    }

А вот мой ImageVolleyRequest класс:

package news;
import android.content.Context;
import android.graphics.Bitmap;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.BasicNetwork;
import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.HurlStack;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import androidx.collection.LruCache;
public class ImageVolleyRequest {
    private static Context context;
    private static ImageVolleyRequest customVolleyRequest;
    private ImageLoader imageLoader = new ImageLoader(this.requestQueue, new ImageCache() {
        private final LruCache<String, Bitmap> cache = new LruCache<>(20);
        public Bitmap getBitmap(String str) {
            return this.cache.get(str);
        }
        public void putBitmap(String str, Bitmap bitmap) {
            this.cache.put(str, bitmap);
        }
    });
    private RequestQueue requestQueue = getRequestQueue();
    private ImageVolleyRequest(Context context2) {
        context = context2;
    }
    public static synchronized ImageVolleyRequest getInstance(Context context2) {
        ImageVolleyRequest imageVolleyRequest;
        context = context2;
        synchronized (ImageVolleyRequest.class) {
            if (customVolleyRequest == null) {
                customVolleyRequest = new ImageVolleyRequest(context2);
            }
            imageVolleyRequest = customVolleyRequest;
        }
        return imageVolleyRequest;
    }
    public RequestQueue getRequestQueue() {
        if (this.requestQueue == null) {
            this.requestQueue = new RequestQueue(new DiskBasedCache(context.getCacheDir(), 10485760), new BasicNetwork(new HurlStack()));
            this.requestQueue.start();
        }
        return this.requestQueue;
    }
    public ImageLoader getImageLoader() {
        return this.imageLoader;
    }
}
Answer 1

Поля инициализируются в порядке объявления.
И получается что вы передаёте в конструктор ImageLoader ссылку this.requestQueue до того как ей присвоено значение.
Нужно поменять местами инициализацию imageLoader и requestQueue

READ ALSO
Cannot access, не могу заимплементить интерфейс

Cannot access, не могу заимплементить интерфейс

Столкнулся с проблемой, не могу заимплементить интерфейс классу, помеченному аннотацией @Service, причем в другом проекте у меня с этим проблем...

183
Как отключить пагинацию в elasticsearch

Как отключить пагинацию в elasticsearch

Создаю запрос в elasticsearch через NativeSearchQueryBuilder(), но ответ приходит мне в форме страниц, те

208
SUM () OVER (Partition By) на MySQL 5.7

SUM () OVER (Partition By) на MySQL 5.7

Гуру MySQL, подскажите, как синтаксически переписать примерно такой запрос, где используется SUM (

253
mysql: сравнение значения поля со значениями из вложенных запросов (count)

mysql: сравнение значения поля со значениями из вложенных запросов (count)

подскажите пожалуйста как разобраться со следующей ситуацией:

249