Java RecyclerView加载数据延迟,用于将ArrayList上的Json数据传递给新活动

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>>()

我正在使用按钮将带有ArrayList的JSON数据传递给RecyclerView上的另一个活动,但当我第一次运行我的应用程序时,RecyclerView显示空列表,然后按后退按钮并再次单击该按钮后,RecyclerView显示我的列表我不知道我的代码有什么问题,请帮助我

    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);