Android Fragments 无法在片段活动上删除和创建数据[已关闭]

chhkpiq4  于 2024-01-08  发布在  Android
关注(0)|答案(1)|浏览(228)

**已关闭。**此问题需要debugging details。目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
4年前关闭。
Improve this question
我试图从一个API网页删除和创建一个数据字符串,但我不能得到错误代码我从原生PHP创建API网站,但我创建的数据 Postman 工作插入和删除数据。
代码删除数据

  1. package com.dev.kedaiit.sibooks.ui.kategori;
  2. import android.app.ProgressDialog;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.EditText;
  9. import android.widget.Toast;
  10. import androidx.appcompat.app.AppCompatActivity;
  11. import com.android.volley.AuthFailureError;
  12. import com.android.volley.Request;
  13. import com.android.volley.Response;
  14. import com.android.volley.VolleyError;
  15. import com.android.volley.toolbox.StringRequest;
  16. import com.dev.kedaiit.sibooks.MainActivity;
  17. import com.dev.kedaiit.sibooks.R;
  18. import com.dev.kedaiit.sibooks.util.AppController;
  19. import com.dev.kedaiit.sibooks.util.ServerAPI;
  20. import org.json.JSONException;
  21. import org.json.JSONObject;
  22. import java.util.HashMap;
  23. import java.util.Map;
  24. public class DeleteKategori extends AppCompatActivity {
  25. EditText deleteID ;
  26. Button btnDelete;
  27. ProgressDialog pd;
  28. @Override
  29. protected void onCreate(Bundle savedInstanceState) {
  30. super.onCreate(savedInstanceState);
  31. setContentView(R.layout.activity_delete_kategori);
  32. deleteID = (EditText) findViewById(R.id.id_kategori);
  33. btnDelete = (Button) findViewById(R.id.btn_delete);
  34. pd = new ProgressDialog(DeleteKategori.this);
  35. btnDelete.setOnClickListener(new View.OnClickListener() {
  36. @Override
  37. public void onClick(View view) {
  38. deleteData();
  39. }
  40. });
  41. }
  42. private void deleteData()
  43. {
  44. pd.setMessage("Delete Data ...");
  45. pd.setCancelable(true);
  46. pd.show();
  47. StringRequest delReq = new StringRequest(Request.Method.POST, ServerAPI.URL_DELETE_KATEGORI, new Response.Listener<String>() {
  48. @Override
  49. public void onResponse(String response) {
  50. pd.cancel();
  51. Log.d("volley","response : " + response.toString());
  52. try {
  53. JSONObject res = new JSONObject(response);
  54. Toast.makeText(DeleteKategori.this,"Successs" +res.getString("message"), Toast.LENGTH_SHORT).show();
  55. } catch (JSONException e) {
  56. e.printStackTrace();
  57. }
  58. startActivity(new Intent(DeleteKategori.this, KategoriFragment.class));
  59. }
  60. },
  61. new Response.ErrorListener() {
  62. @Override
  63. public void onErrorResponse(VolleyError error) {
  64. pd.cancel();
  65. Log.d("volley", "error : " + error.getMessage());
  66. Toast.makeText(DeleteKategori.this, "ERROR DELETE DATA", Toast.LENGTH_SHORT).show();
  67. }
  68. }){
  69. @Override
  70. protected Map<String, String> getParams() throws AuthFailureError {
  71. Map<String, String> map = new HashMap<>();
  72. map.put("id_kategori",deleteID.getText().toString());
  73. return map;
  74. }
  75. };
  76. AppController.getInstance().addToRequestQueue(delReq);
  77. }
  78. }

字符串
代码插入数据

  1. package com.dev.kedaiit.sibooks.ui.kategori;
  2. import android.app.ProgressDialog;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Button;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. import com.android.volley.AuthFailureError;
  11. import com.android.volley.Request;
  12. import com.android.volley.Response;
  13. import com.android.volley.VolleyError;
  14. import com.android.volley.toolbox.StringRequest;
  15. import com.dev.kedaiit.sibooks.R;
  16. import com.dev.kedaiit.sibooks.util.AppController;
  17. import com.dev.kedaiit.sibooks.util.ServerAPI;
  18. import org.json.JSONException;
  19. import org.json.JSONObject;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. public class InsertKategori extends AppCompatActivity {
  23. EditText id_kategori, kategori;
  24. Button btnBatal, btnSimpan;
  25. ProgressDialog pd;
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_insert_kategori);
  30. /*get data from intent*/
  31. Intent data = getIntent();
  32. final int update = data.getIntExtra("update",0);
  33. String intent_idkategori = data.getStringExtra("id_kategori");
  34. String intent_kategori = data.getStringExtra("kategori");
  35. /*end get data from intent*/
  36. // id_kategori = (EditText) findViewById(R.id.idkategori);
  37. kategori = (EditText) findViewById(R.id.edt_kategori);
  38. btnBatal = (Button) findViewById(R.id.btn_cancel);
  39. btnSimpan = (Button) findViewById(R.id.btn_simpan);
  40. pd = new ProgressDialog(InsertKategori.this);
  41. /*kondisi update / insert*/
  42. if(update == 1)
  43. {
  44. btnSimpan.setText("Update Data");
  45. id_kategori.setText(intent_idkategori);
  46. id_kategori.setVisibility(View.VISIBLE);
  47. kategori.setText(intent_kategori);
  48. }
  49. btnSimpan.setOnClickListener(new View.OnClickListener() {
  50. @Override
  51. public void onClick(View view) {
  52. if(update == 1)
  53. {
  54. Update_data();
  55. }else {
  56. simpanData();
  57. }
  58. }
  59. });
  60. btnBatal.setOnClickListener(new View.OnClickListener() {
  61. @Override
  62. public void onClick(View view) {
  63. Intent main = new Intent(InsertKategori.this,KategoriFragment.class);
  64. startActivity(main);
  65. }
  66. });
  67. }
  68. private void Update_data()
  69. {
  70. pd.setMessage("Update Data");
  71. pd.setCancelable(true);
  72. pd.show();
  73. StringRequest updateReq = new StringRequest(Request.Method.POST, ServerAPI.URL_UPDATE_KATEGORI,
  74. new Response.Listener<String>() {
  75. @Override
  76. public void onResponse(String response) {
  77. pd.cancel();
  78. try {
  79. JSONObject res = new JSONObject(response);
  80. Toast.makeText(InsertKategori.this, ""+ res.getString("message") , Toast.LENGTH_SHORT).show();
  81. } catch (JSONException e) {
  82. e.printStackTrace();
  83. }
  84. startActivity( new Intent(InsertKategori.this,KategoriFragment.class));
  85. }
  86. },
  87. new Response.ErrorListener() {
  88. @Override
  89. public void onErrorResponse(VolleyError error) {
  90. pd.cancel();
  91. Toast.makeText(InsertKategori.this, "Gagal Insert Data", Toast.LENGTH_SHORT).show();
  92. }
  93. }){
  94. @Override
  95. protected Map<String, String> getParams() throws AuthFailureError {
  96. Map<String,String> map = new HashMap<>();
  97. map.put("id_kategori",id_kategori.getText().toString());
  98. map.put("kategori",kategori.getText().toString());
  99. return map;
  100. }
  101. };
  102. AppController.getInstance().addToRequestQueue(updateReq);
  103. }
  104. private void simpanData()
  105. {
  106. pd.setMessage("Menyimpan Data");
  107. pd.setCancelable(true);
  108. pd.show();
  109. StringRequest sendData = new StringRequest(Request.Method.POST, ServerAPI.URL_INSERT_KATEGORI,
  110. new Response.Listener<String>() {
  111. @Override
  112. public void onResponse(String response) {
  113. pd.cancel();
  114. try {
  115. JSONObject res = new JSONObject(response);
  116. Toast.makeText(InsertKategori.this, ""+ res.getString("message") , Toast.LENGTH_SHORT).show();
  117. } catch (JSONException e) {
  118. e.printStackTrace();
  119. }
  120. startActivity( new Intent(InsertKategori.this,KategoriFragment.class));
  121. }
  122. },
  123. new Response.ErrorListener() {
  124. @Override
  125. public void onErrorResponse(VolleyError error) {
  126. pd.cancel();
  127. Toast.makeText(InsertKategori.this, "Gagal Insert Data", Toast.LENGTH_SHORT).show();
  128. }
  129. }){
  130. @Override
  131. protected Map<String, String> getParams() throws AuthFailureError {
  132. Map<String,String> map = new HashMap<>();
  133. map.put("id_kategori",id_kategori.getText().toString());
  134. map.put("kategori",kategori.getText().toString());
  135. return map;
  136. }
  137. };
  138. AppController.getInstance().addToRequestQueue(sendData);
  139. }
  140. }


片段Kategori

  1. package com.dev.kedaiit.sibooks.ui.kategori;
  2. import android.app.ProgressDialog;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import androidx.fragment.app.Fragment;
  10. import androidx.recyclerview.widget.DividerItemDecoration;
  11. import androidx.recyclerview.widget.LinearLayoutManager;
  12. import androidx.recyclerview.widget.RecyclerView;
  13. import com.android.volley.Request;
  14. import com.android.volley.RequestQueue;
  15. import com.android.volley.Response;
  16. import com.android.volley.VolleyError;
  17. import com.android.volley.toolbox.JsonObjectRequest;
  18. import com.android.volley.toolbox.Volley;
  19. import com.dev.kedaiit.sibooks.R;
  20. import com.dev.kedaiit.sibooks.adapter.AdapterDataKategori;
  21. import com.dev.kedaiit.sibooks.model.DataKategori;
  22. import com.dev.kedaiit.sibooks.util.ServerAPI;
  23. import com.google.android.material.floatingactionbutton.FloatingActionButton;
  24. import org.json.JSONArray;
  25. import org.json.JSONException;
  26. import org.json.JSONObject;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. public class KategoriFragment extends Fragment {
  30. private RecyclerView recyclerView;
  31. private FloatingActionButton floatingActionButton;
  32. private LinearLayoutManager linearLayoutManager;
  33. private DividerItemDecoration dividerItemDecoration;
  34. private List<DataKategori> list;
  35. private RecyclerView.Adapter adapter;
  36. public KategoriFragment() {
  37. // Required empty public constructor
  38. }
  39. @Override
  40. public View onCreateView(final LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
  41. final View view = inflater.inflate(R.layout.fragment_kategori, container, false);
  42. recyclerView = view.findViewById(R.id.recyclerViewKategori);
  43. list = new ArrayList<DataKategori>();
  44. adapter = new AdapterDataKategori(getContext(), list);
  45. linearLayoutManager = new LinearLayoutManager(getContext());
  46. linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
  47. dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(), linearLayoutManager.getOrientation());
  48. recyclerView.setHasFixedSize(true);
  49. recyclerView.setLayoutManager(linearLayoutManager);
  50. recyclerView.addItemDecoration(dividerItemDecoration);
  51. recyclerView.setAdapter(adapter);
  52. FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab);
  53. FloatingActionButton delKtg = (FloatingActionButton) view.findViewById(R.id.delKtg);
  54. fab.setOnClickListener(new View.OnClickListener() {
  55. @Override
  56. public void onClick(View view) {
  57. Intent intent = new Intent(view.getContext(), InsertKategori.class);
  58. startActivity(intent);
  59. }
  60. });
  61. delKtg.setOnClickListener(new View.OnClickListener() {
  62. @Override
  63. public void onClick(View view) {
  64. Intent intent = new Intent(view.getContext(),DeleteKategori.class);
  65. startActivity(intent);
  66. }
  67. });
  68. getData();
  69. return view;
  70. }
  71. private void getData() {
  72. final ProgressDialog progressDialog = new ProgressDialog(getContext());
  73. progressDialog.setMessage("Loading...");
  74. progressDialog.show();
  75. JsonObjectRequest my_request = new JsonObjectRequest(Request.Method.GET, ServerAPI.URL_DATA_KATEGORI, null, new Response.Listener<JSONObject>() {
  76. @Override
  77. public void onResponse(JSONObject response) {
  78. try{
  79. JSONArray jsonArray = response.getJSONArray("data");
  80. for (int i = 0; i < jsonArray.length(); i++) {
  81. JSONObject Jobj = jsonArray.getJSONObject(i);
  82. DataKategori obj = new DataKategori();
  83. obj.setId_kategori(Jobj.getString("id_kategori"));
  84. obj.setKategori(Jobj.getString("kategori"));
  85. list.add(obj);
  86. }
  87. } catch (JSONException e) {
  88. e.printStackTrace();
  89. progressDialog.dismiss();
  90. }
  91. adapter.notifyDataSetChanged();
  92. progressDialog.dismiss();
  93. }
  94. }, new Response.ErrorListener() {
  95. @Override
  96. public void onErrorResponse(VolleyError error) {
  97. Log.e("Volley", "Error: " + error.getMessage());
  98. progressDialog.dismiss();
  99. }
  100. });
  101. RequestQueue requestQueue = Volley.newRequestQueue(getContext());
  102. requestQueue.add(my_request);
  103. }
  104. }


https://github.com/bellabeen/sibooks-client这个项目我在logcat中得到这个,当我没有得到错误代码。

kqqjbcuj

kqqjbcuj1#

你的代码几乎是好的。你只是错过了一件事。你没有初始化VolleyRequest。在simponData和UpdateData方法中,在底部写这一行。

  1. RequestQueue requestQueue = Volley.newRequestQueue(getContext());
  2. requestQueue.add(my_request);

字符串
而不是AppController.getInstance().addToRequestQueue(updateReq)。另一件事是,当收到响应时,您正在调用Intent中的片段。您应该在成功接收结果时调用onbackPress()。

  1. new Response.Listener<String>() {
  2. @Override
  3. public void onResponse(String response) {
  4. pd.cancel();
  5. try {
  6. JSONObject res = new JSONObject(response);
  7. Toast.makeText(InsertKategori.this, ""+ res.getString("message") , Toast.LENGTH_SHORT).show();
  8. } catch (JSONException e) {
  9. e.printStackTrace();
  10. }
  11. onBackPressed();
  12. }
  13. },


它会还原之前的片段,为了在收到成功响应时更新KategoriFragment视图,可以在onResume()方法中调用getData()方法,而不是oncreate(),只要片段可见,它就会调用此方法

展开查看全部

相关问题