java为什么JSON数据无法访问ViewPager?
我想在PagerAdapter for slider中使用截取JSON获取图像,但问题是,使用JSON获取的数据在构造函数之前到达,但并没有重新连接到InstanceItem方法强>
这是我的xml文件强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:orientation="vertical"
tools:context=".MainActivity">
<安卓x.viewpager.widget.ViewPager
安卓:layout_width="match_parent"
安卓:layout_height="@dimen/_200sdp"
安卓:id="@+id/view_pager">
</安卓x.viewpager.widget.ViewPager>
<TextView
安卓:layout_width="match_parent"
安卓:layout_height="@dimen/_50sdp"
安卓:text="@string/app_name"
安卓:textSize="@dimen/_30sdp"
安卓:textColor="@color/colorPrimaryDark"
安卓:id="@+id/txt"/>
</LinearLayout>
主要活动。java
package com.example.sliderwithvolleyjson;
import 安卓x.appcompat.app.AppCompatActivity;
import 安卓x.viewpager.widget.ViewPager;
import 安卓.os.Bundle;
import 安卓.util.Log;
import 安卓.widget.Toast;
import com.安卓.volley.Request;
import com.安卓.volley.RequestQueue;
import com.安卓.volley.Response;
import com.安卓.volley.VolleyError;
import com.安卓.volley.toolbox.JsonObjectRequest;
import com.安卓.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
String slider_url="Here is my API";
ArrayList<String> image=new ArrayList<>();
RequestQueue queue;
Slider_Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queue= Volley.newRequestQueue(getApplicationContext());
viewPager=findViewById(R.id.view_pager);
getImageByJson();
viewPager.setAdapter(adapter);
}
public void getImageByJson(){
JsonObjectRequest request=new JsonObjectRequest(Request.Method.GET, slider_url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray array=response.getJSONArray("slider");
for (int i=0;i<array.length();i++){
JSONArray jsonData=array.getJSONArray(i);
image.add(jsonData.getString(1));
}
String[] imageUrls=new String[image.size()];
imageUrls=image.toArray(imageUrls);
for (String s : imageUrls){
Log.d("String",s);
}
adapter=new Slider_Adapter(getApplicationContext(),imageUrls);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),String.valueOf(e),Toast.LENGTH_LONG).show();
Log.d("ath",String.valueOf(e));
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(),String.valueOf(error),Toast.LENGTH_LONG).show();
Log.d("Error",String.valueOf(error));
}
});
queue.add(request);
}
}
我使用mainactivity类中的API从服务器获取图像。我使用截击JSON来做这件事。然后我使用viewpager将这些图像传递给PagerAdapter类
PagerAdapter类
package com.example.sliderwithvolleyjson;
import 安卓.content.Context;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.ImageView;
import 安卓.widget.TextView;
import 安卓.widget.Toast;
import 安卓x.annotation.NonNull;
import 安卓x.viewpager.widget.PagerAdapter;
import 安卓x.viewpager.widget.ViewPager;
import com.squareup.picasso.Picasso;
public class Slider_Adapter extends PagerAdapter {
LayoutInflater inflater;
private Context context;
private String[] imageurls;
public Slider_Adapter(Context context, String[] imageurls) {
this.context = context;
this.imageurls = imageurls;
Toast.makeText(context, String.valueOf(imageurls[1]), Toast.LENGTH_SHORT).show();
}
@Override
public int getCount() {
return imageurls.length;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view==object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view=inflater.inflate(R.layout.activity_main,container);
ImageView imageView=new ImageView(container);
TextView textView=view.findViewById(R.id.txt);
textView.setText(String.valueOf(imageurls.length));
Picasso.with(context).load(imageurls[position]).fit().into(imageView);
ViewPager pager=(ViewPager)container;
pager.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
}
直到构造函数(我尝试使用toast消息)才到达这些图像,但在instanceItem方法和其他函数中找不到这些图像/数据
提前谢谢
# 1 楼答案
# 2 楼答案
在
onResponse
方法中的这行代码之后,添加此代码并将其从onCreate中删除,因为它不是必需的