我正在使用 Button 将带有 ArrayList 的 JSON 数据传递到 RecyclerView 上的另一个 Activity,但是当我第一次运行我的应用程序时,RecyclerView 显示空列表,按下后退按钮并再次单击该按钮后,RecyclerView 显示我的列表,我不知道我的代码出了什么问题,请帮助我
mainList = gson.fromJson(getIntent().getStringExtra("key"), new TypeToken<List<MyData>>(){}.getType());
if (mainList != null) {
setrecyclerview(mainList);
} else {
pr.show();
}
我会尝试使用这个,但不起作用:(
主要 Activity
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);
}
主要 Activity 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;
}
}
适配器
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);
}
}
我的数据
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);
}
我想当在MainActivity中单击我的按钮时在MainActivity2的RecyclerView中显示MyData,但第一次运行我的应用程序时显示空的Recycler,但当使用后按按钮并单击传递数据按钮时再次显示数据
最佳答案
在 MainActivity2 中,第一次调用 set recyclerview() 时,主列表为空。
更改您的 mainActivity2 代码如下:
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;
}
关于java - RecyclerView 加载数据延迟以将 ArrayList 上的 Json 数据传递给新 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505961/