Android 无法从服务器加载ViewPager中的图像
我在我的应用程序中定义了查看寻呼机,我正在尝试使用volley库在查看寻呼机中加载图像。我的工作如下: 首先,如果响应为真,我将向服务器发送请求,然后在response方法中发送另一个请求以从服务器获取图像 以下是我在日志窗口中遇到的错误:Android 无法从服务器加载ViewPager中的图像,android,android-fragments,nullpointerexception,android-viewpager,Android,Android Fragments,Nullpointerexception,Android Viewpager,我在我的应用程序中定义了查看寻呼机,我正在尝试使用volley库在查看寻呼机中加载图像。我的工作如下: 首先,如果响应为真,我将向服务器发送请求,然后在response方法中发送另一个请求以从服务器获取图像 以下是我在日志窗口中遇到的错误: java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.Request com.android.volley.RequestQueue.ad
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 tiffino.app.com.Home.loadDiscViewPager(Home.java:492)
at tiffino.app.com.Home$1.onResponse(Home.java:302)
at tiffino.app.com.Home$1.onResponse(Home.java:290)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
以下是我正在使用的代码:
OfferImageModel.java
public class OfferImageModel {
String Image;
public OfferImageModel(){
}
public OfferImageModel(String image) {
Image = image;
}
public String getImage() {
return Image;
}
public void setImage(String image) {
Image = image;
}
}
Home.java
public class Home extends Fragment{
String str1 = "Ajmer";
ViewPager discImages;
RequestQueue requestQueue, discQueue;
StringRequest stringRequest, discRequest;
private static final String URL = "https://tiffino.herokuapp.com/fetch";
private static final String OFFER_URL = "https://tiffino.herokuapp.com/offers";
List<OfferImageModel> offers;
DiscViewPager adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_home, container, false);
discImages = view.findViewById(R.id.discImages);
offers = new ArrayList<>();
sendLocation(str1);
return view;
}
private void sendLocation(final String str1) {
requestQueue = Volley.newRequestQueue(getActivity());
stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.equals("True")) {
loadDiscViewPager();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> map = new HashMap<>();
map.put("name", str1);
return map;
}
};
requestQueue.add(stringRequest);
}
public void loadDiscViewPager() {
discRequest = new StringRequest(Request.Method.POST, OFFER_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
for (int i = 0; i < jsonArray.length(); i++) {
OfferImageModel model = new OfferImageModel();
JSONObject jsonObject = jsonArray.getJSONObject(i);
String loadImages = jsonObject.getString("Image");
model.setImage(loadImages);
offers.add(model);
}
adapter = new DiscViewPager(getActivity(), offers);
discImages.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> params = new HashMap<>();
params.put("Place",str1);
return params;
}
};
discQueue.add(discRequest);
}
}
public类Home扩展片段{
字符串str1=“Ajmer”;
可视传呼机;
RequestQueue RequestQueue,discQueue;
StringRequest StringRequest,discRequest;
私有静态最终字符串URL=”https://tiffino.herokuapp.com/fetch";
私有静态最终字符串OFFER_URL=”https://tiffino.herokuapp.com/offers";
列出报价;
DiscViewPager适配器;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u home,container,false);
discImages=view.findviewbyd(R.id.discImages);
offers=newarraylist();
发送位置(str1);
返回视图;
}
私有void sendLocation(最终字符串str1){
requestQueue=Volley.newRequestQueue(getActivity());
stringRequest=newStringRequest(Request.Method.POST,URL,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
if(response.equals(“True”)){
loadDiscViewPager();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}) {
@凌驾
受保护的映射getParams()引发AuthFailureError{
HashMap=newHashMap();
map.put(“名称”,str1);
返回图;
}
};
添加(stringRequest);
}
public void loadDiscViewPager(){
discRequest=newStringRequest(Request.Method.POST、OFFER\uURL、newresponse.Listener()){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONArray JSONArray=新JSONArray(响应);
for(int i=0;i
DiscViewPager.java
public class DiscViewPager extends PagerAdapter {
private LayoutInflater layoutInflater;
Context context;
private List<OfferImageModel> offers;
public DiscViewPager(Context context, List<OfferImageModel> offers) {
this.context = context;
this.offers = offers;
}
@Override
public int getCount() {
return offers.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return (view == o);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
assert layoutInflater != null;
View view = layoutInflater.inflate(R.layout.custom_offer, null);
ImageView offerImage = view.findViewById(R.id.offerImage);
OfferImageModel model = offers.get(position);
Picasso.with(context).load(model.getImage()).fit().centerInside().into(offerImage);
ViewPager vp = (ViewPager) container;
vp.addView(view, 0);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
ViewPager vp = (ViewPager) container;
View view = (View) object;
vp.removeView(view);
}
}
公共类DiscViewPager扩展了PagerAdapter{
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
语境;
私人名单优惠;
公共DiscViewPager(上下文、列表提供){
this.context=上下文;
this.offers=offers;
}
@凌驾
public int getCount(){
返回报价。size();
}
@凌驾
公共布尔值isViewFromObject(@NonNull视图,@NonNull对象o){
返回(视图==o);
}
@非空
@凌驾
公共对象实例化项(@NonNull视图组容器,int位置){
layoutInflater=(layoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
assert layoutInflater!=null;
视图=布局更平坦。充气(R.layout.custom\u offer,null);
ImageView offerImage=view.findViewById(R.id.offerImage);
OfferImageModel=offers.get(位置);
毕加索.with(context).load(model.getImage()).fit().centerInside().into(offerImage);
ViewPager vp=(ViewPager)容器;
vp.addView(视图,0);
返回视图;
}
@凌驾
public void destructionItem(@NonNull视图组容器,int位置,@NonNull对象){
ViewPager vp=(ViewPager)容器;
视图=(视图)对象;
副总裁removeView(视图);
}
}
请让我知道我在上述代码中做错了什么。谢谢您似乎没有在任何地方初始化discQueue,因此出现空指针异常您忘记在
loadDiscViewPager()
方法中初始化discQueue。是的,错误已得到解决,但图像未获取任何线索。discQueue已初始化,但图像未获取。