【问题标题】:Volley shows null error when activity loads first timeVolley 首次加载活动时显示空错误
【发布时间】:2019-03-25 00:54:12
【问题描述】:

我的 android 活动中有视图寻呼机,并使用 NodeJs 和 MongoDb 作为后端服务。当我的活动第一次开始时,它显示 volley error null 当我停止我的应用程序并重新启动它时,它会在视图寻呼机中加载图像并且工作正常。 为什么第一次开始活动时它没有从服务器获取数据。

这是我的代码:

MainActivity.java

public class MainActivity extends AppCompatActivity {

ViewPager viewPager;
TabLayout tab;

RequestQueue rq;
List<Model> list;
Adapter adapter;

String request_url = "https://example.com";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    rq = CustomRequest.getInstance(MainActivity.this).getRequestQueue();

    viewPager = findViewById(R.id.viewPager);
    tab = findViewById(R.id.tabLayout);

    list = new ArrayList<>();

    tab.setupWithViewPager(viewPager, true);

    final ProgressDialog prg = new ProgressDialog(MainActivity.this);
    prg.setMessage("Loading");
    prg.show();

    StringRequest stringRequest = new StringRequest(Request.Method.POST, request_url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            prg.dismiss();

            try {
                JSONArray jsonArr  = new JSONArray(response);

                for (int i = 0; i < jsonArr.length(); i++) {

                    Model model = new Model();

                    JSONObject jsonObject = jsonArr.getJSONObject(i);

                    model.setImage(jsonObject.getString("Image"));

                    list.add(model);

                }

                adapter = new Adapter((ArrayList<Model>) list, MainActivity.this);

                viewPager.setAdapter(adapter);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            prg.dismiss();

            Toast.makeText(getApplicationContext(),""+error.getMessage(),Toast.LENGTH_SHORT).show();
        }
    }){

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

            HashMap<String,String> params = new HashMap<>();

            params.put("place","Ajmer");

            return params;
        }
    };

    CustomRequest.getInstance(MainActivity.this).addToRequetQueue(stringRequest);
 }
}

Adapter.java

public class Adapter extends PagerAdapter {

ArrayList<Model> list = new ArrayList<>();
Context context;
LayoutInflater layoutInflater;

public Adapter(ArrayList<Model> list, Context context) {
    this.list = list;
    this.context = context;
}

@Override
public int getCount() {
    return list.size();
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
    return view == o;
}

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position) {

    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    assert layoutInflater != null;
    View view = layoutInflater.inflate(R.layout.custom, null);

    Model model =  list.get(position);

    ImageView imageView = view.findViewById(R.id.imageView);

    Glide.with(context).load(model.getImage()).into(imageView);

    ViewPager vp = (ViewPager) container;
    vp.addView(view, 0);
    return view;
}

@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

    container.removeView((LinearLayout)object);
 }
}

请有人告诉我为什么会遇到这个问题。

谢谢

【问题讨论】:

    标签: android android-studio android-volley


    【解决方案1】:

    您是否初始化了 RequestQueue。如果不是,请在字符串请求之前添加以下代码

    RequestQueue queue = Volley.newRequestQueue(context);
    

    在该调用之后添加 queue.add 在字符串请求调用之后

    queue.add(stringRequest);
    

    如果错误仍然存​​在... 打印 volley 的响应是否为空。

    【讨论】:

    • 是的,我试过了,但第一次开始活动时仍然显示 null。我使用的是 volley singleton 模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2022-07-04
    相关资源
    最近更新 更多