gpt4 book ai didi

java - 如何让我在EditText中输入的数据插入到数据库中并显示在recyclerview上而不需要像ajax那样刷新?

转载 作者:行者123 更新时间:2023-12-02 06:27:38 27 4
gpt4 key购买 nike

我尝试使用adapter.notifyDataSetChanged()但失败了,也许有人可以告诉我代码放置在哪里。

这是我的主要 Activity :

private RecyclerView mList;
private LinearLayoutManager linearLayoutManager;
private DividerItemDecoration dividerItemDecoration;
private Adapter mExampleAdapter;
private ArrayList<Model> mExampleList;
private RecyclerView.Adapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
modelList = new ArrayList<>();
pesan= (EditText) findViewById(R.id.pesan);
user= 1;
admin= 1;
save = (ImageButton) findViewById(R.id.btn_submit);
mList = findViewById(R.id.main_list);
modelList = new ArrayList<>();
adapter = new Adapter(getApplicationContext(),modelList);

linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
dividerItemDecoration = new DividerItemDecoration(mList.getContext(), linearLayoutManager.getOrientation());

mList.setHasFixedSize(true);
mList.setLayoutManager(linearLayoutManager);

mList.setAdapter(adapter);

save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String isi_pesan = pesan.getText().toString();
final String id_admin = admin.toString();
final String id_user = user.toString();

RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {

pesan.setText("");

}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

Toast.makeText(MainActivity.this, "my error :"+error, Toast.LENGTH_LONG).show();
Log.i("My error",""+error);
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {

Map<String,String> map = new HashMap<String, String>();
map.put("message",isi_pesan);
map.put("id_admin",id_admin);
map.put("id_user",id_user);
return map;
}
};
queue.add(request);


}
});

getData();
}


private void getData() {
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading...");
progressDialog.show();

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
for (int i = 0; i < response.length(); i++) {
try {
JSONObject jsonObject = response.getJSONObject(i);

Model model = new Model();
model.setPesan(jsonObject.getString("isi_pesan"));
model.setAdmin(jsonObject.getString("sender"));

modelList.add(model);
adapter.notifyDataSetChanged();
mExampleAdapter = new Adapter(MainActivity.this, modelList);
mList.setAdapter(mExampleAdapter);

} catch (JSONException e) {
e.printStackTrace();
progressDialog.dismiss();
}
}

progressDialog.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley", error.toString());
progressDialog.dismiss();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsonArrayRequest);
}

}

我希望我发布的数据像whatsapp一样实时显示

最佳答案

首先你告诉recyclerveiw项目的数量是固定的mList.setHasFixedSize(true);但在 getData 方法中,您向其中添加了一个项目。

第二,刚添加项目时不要调用 adapter.notifyDataSetChanged();,而是调用 notifyItemInserted(position);

第三,调用adapter.notifyDataSetChanged();后更换适配器,先更换适配器然后调用adapter.notifyDataSetChanged();

关于java - 如何让我在EditText中输入的数据插入到数据库中并显示在recyclerview上而不需要像ajax那样刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55775706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com