Java RecyclerView加载数据延迟,用于将ArrayList上的Json数据传递给新活动
我正在使用按钮将带有ArrayList的JSON数据传递给RecyclerView上的另一个活动,但当我第一次运行我的应用程序时,RecyclerView显示空列表,然后按后退按钮并再次单击该按钮后,RecyclerView显示我的列表我不知道我的代码有什么问题,请帮助我Java RecyclerView加载数据延迟,用于将ArrayList上的Json数据传递给新活动,java,android,json,Java,Android,Json,我正在使用按钮将带有ArrayList的JSON数据传递给RecyclerView上的另一个活动,但当我第一次运行我的应用程序时,RecyclerView显示空列表,然后按后退按钮并再次单击该按钮后,RecyclerView显示我的列表我不知道我的代码有什么问题,请帮助我 mainList = gson.fromJson(getIntent().getStringExtra("key"), new TypeToken<List<MyData>>()
mainList = gson.fromJson(getIntent().getStringExtra("key"), new TypeToken<List<MyData>>(){}.getType());
if (mainList != null) {
setrecyclerview(mainList);
} else {
pr.show();
}
mainList=gson.fromJson(getIntent().getStringExtra(“key”),new-TypeToken(){}.getType());
if(mainList!=null){
setrecyclerview(主列表);
}否则{
pr.show();
}
我将尝试使用此选项,但不起作用:(
main活动
public class MainActivity extends AppCompatActivity {
private List<MyData> data_list;
private RequestQueue requestQueue;
String get_info_url = "http://192.168.170.2/iVolleyPractice/user_info_check.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//recyclerView = (RecyclerView) findViewById(R.id.data_recycler);
data_list = new ArrayList<>();
//load_from_data();
}
public void GoOnClick(View view) {
load_from_data();
Gson gson = new Gson();
String json = new Gson().toJson(data_list);
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
intent.putExtra("key", json);
startActivity(intent);
}
private void load_from_data() {
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, get_info_url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("users");
for (int i = 0 ; i < jsonArray.length() ; i++)
{
JSONObject users = jsonArray.getJSONObject(i);
MyData myData = new MyData();
myData.setName(users.getString("name"));
myData.setPassword(users.getString("password"));
data_list.add(myData);
}
} catch (Exception e) {}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
//setrecyclerview(data_list);
requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(jsonObjectRequest);
}
public类MainActivity扩展了AppCompatActivity{
私有列表数据列表;
私有请求队列请求队列;
字符串get\u info\u url=”http://192.168.170.2/iVolleyPractice/user_info_check.php";
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//recyclerView=(recyclerView)findViewById(R.id.data\U recycler);
data_list=new ArrayList();
//从_数据()加载_;
}
公共无效鼠标单击(视图){
从_数据()加载_;
Gson Gson=新的Gson();
字符串json=new Gson().toJson(数据列表);
意向意向=新意向(MainActivity.this、Main2Activity.class);
intent.putExtra(“key”,json);
星触觉(意向);
}
从_数据()加载_{
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.POST,get_info_url,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray JSONArray=response.getJSONArray(“用户”);
for(int i=0;i
主要活动2
public class Main2Activity extends AppCompatActivity {
public RecyclerView recyclerView;
public List<MyData> mainList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
recyclerView = (RecyclerView) findViewById(R.id.go_recycle);
Gson gson = new Gson();
ProgressDialog pr = new ProgressDialog(this);
this.getIntent().getExtras().getParcelableArrayList("key");
ProgressDialog pr = new ProgressDialog(this);
this.getIntent().getExtras().getParcelableArrayList("key");
mainList = gson.fromJson(getIntent().getStringExtra("key"), new TypeToken<List<MyData>>(){}.getType());
setrecyclerview(mainList);
}
private boolean setrecyclerview(List<MyData> data_list) {
CustomAdapter adapter = new CustomAdapter(this, data_list);
DividerItemDecoration divider = new DividerItemDecoration(recyclerView.getContext(), new LinearLayoutManager(this).getOrientation());
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(divider);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
return true;
}
公共类Main2活动扩展了AppCompative活动{
公共回收视图回收视图;
公开名单;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
recyclerView=(recyclerView)findViewById(R.id.go\u recycle);
Gson Gson=新的Gson();
ProgressDialog pr=新建ProgressDialog(此);
这个.getIntent().getExtras().getParcelableArrayList(“键”);
ProgressDialog pr=新建ProgressDialog(此);
这个.getIntent().getExtras().getParcelableArrayList(“键”);
mainList=gson.fromJson(getIntent().getStringExtra(“key”),new-TypeToken(){}.getType());
setrecyclerview(主列表);
}
私有布尔setrecyclerview(列表数据\u列表){
CustomAdapter=新的CustomAdapter(此,数据列表);
DividerItemDecoration divider=new DividerItemDecoration(recyclerView.getContext(),new LinearLayoutManager(this.getOrientation());
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
回收视图。附加装饰(分隔器);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(适配器);
返回true;
}
}
适配器
class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private Context context;
private List<MyData> myData;
public CustomAdapter(Context context, List<MyData> myData) {
this.context = context;
this.myData = myData;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_inflater, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.name.setText(myData.get(position).getName());
holder.pass.setText(myData.get(position).getPassword());
}
@Override
public int getItemCount() {
return myData.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView name,pass;
public ViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name_txt);
pass = (TextView) itemView.findViewById(R.id.pass_txt);
}
}
class CustomAdapter扩展了RecyclerView.Adapter{
私人语境;
私有列表数据;
公共CustomAdapter(上下文,列表myData){
this.context=上下文;
this.myData=myData;
}
@非空
@凌驾
公共ViewHolder onCreateViewHolder(视图组父级,int i){
View itemView=LayoutInflater.from(parent.getContext()).inflate(R.layout.layout\u inflater,parent,false);
返回新的ViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.name.setText(myData.get(position.getName());
holder.pass.setText(myData.get(position.getPassword());
}
@凌驾
public int getItemCount(){
返回myData.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
TextView名称,pass;
公共视图持有者(视图项视图){
超级(项目视图);
name=(TextView)itemView.findViewById(R.id.name\u txt);
pass=(TextView)itemView.findViewById(R.id.pass\u txt);
}
}
MyData
public class MyData implements Parcelable {
private String name,password;
public MyData() {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
protected MyData(Parcel in) {
name = in.readString();
password = in.readString();
}
public static final Creator<MyData> CREATOR = new Creator<MyData>() {
@Override
public MyData createFromParcel(Parcel in) {
return new MyData(in);
}
@Override
public MyData[] newArray(int size) {
return new MyData[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(password);
}
公共类MyData实现可包裹{
私有字符串名称、密码;
公共MyData(){
this.name=名称;
this.password=密码;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
受保护的MyData(包裹中){
name=in.readString();
password=in.readString();
}
公共静态最终创建者=新创建者(){
@凌驾
公共MyData createFromParcel(地块中){
返回新的MyData(在中);
}
@凌驾
公共MyData[]新数组(整数大小){
返回新的MyData[大小];
}
};
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的地书面记录(名称);
目的写入字符串(密码);
}
当单击MainActivity中的“我的”按钮时,我想在MainActivity2中的RecyclerView中显示我的数据,但对于我的应用程序的第一次运行,显示空的回收器,但当使用back时,再次按下按钮并单击“传递数据”按钮时,在MainActivity2中显示数据,当您第一次调用setrecyclerview()mainList时,数据列表为空 换你的m
public RecyclerView recyclerView;
public List<MyData> mainList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
recyclerView = (RecyclerView) findViewById(R.id.go_recycle);
Gson gson = new Gson();
ProgressDialog pr = new ProgressDialog(this);
this.getIntent().getExtras().getParcelableArrayList("key");
mainList = gson.fromJson(getIntent().getStringExtra("key"), new TypeToken<List<MyData>>(){}.getType());
if (!setrecyclerview(mainList) ) {
//I don't know why you are doing this.because setrecyclerview() always returns true
pr.show();
} else {
setrecyclerview(mainList);
}
}
private boolean setrecyclerview(List<MyData> data_list) {
CustomAdapter adapter = new CustomAdapter(this, data_list);
DividerItemDecoration divider = new DividerItemDecoration(recyclerView.getContext(), new LinearLayoutManager(this).getOrientation());
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(divider);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
return true;
}
if (!setrecyclerview(mainList) ) {
pr.show();
} else {
mainList = gson.fromJson(getIntent().getStringExtra("key"), new TypeToken<List<MyData>>(){}.getType());
setrecyclerview(mainList);
}
mainList = gson.fromJson(getIntent().getStringExtra("key"), new TypeToken<List<MyData>>(){}.getType());
setrecyclerview(mainList);