Volley 首次加载活动时显示空错误
Posted
技术标签:
【中文标题】Volley 首次加载活动时显示空错误【英文标题】:Volley shows null error when activity loads first time 【发布时间】: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);
请有人告诉我为什么会遇到这个问题。
谢谢
【问题讨论】:
【参考方案1】:您是否初始化了 RequestQueue。如果不是,请在字符串请求之前添加以下代码
RequestQueue queue = Volley.newRequestQueue(context);
在该调用之后添加 queue.add 在字符串请求调用之后
queue.add(stringRequest);
如果错误仍然存在... 打印 volley 的响应是否为空。
【讨论】:
是的,我试过了,但第一次开始活动时仍然显示 null。我使用的是 volley singleton 模式。以上是关于Volley 首次加载活动时显示空错误的主要内容,如果未能解决你的问题,请参考以下文章