在通过2 ScreenActivity SQLite后放置ID自动增量

时间:2017-01-10 06:49:02

标签: android sqlite sql-update

我被困了几天,不幸的是我不知道如何解决它。 我有 DetailScreen.java ,它显示来自 MainScreen (Recyclerview&list;列表之一)的数据。

  1. 我尝试使用此代码但是当我尝试更改使用时没有效果 我的更新功能中的COLUMN_NOMOR,我可以更改名称但是 更改提名者时出错。我猜,它的使用权 我的更新函数中的COLUMN_ID因为id是我的PK-AI。所以是否 因为我没有在DetailScreen中调用COLUMN_ID?但我怎么称呼我的 我的DetailsS​​creen中的ID也在我的UpdateScreen中?

  2. 如果数据成功更新,屏幕将自动再次转到DetailScreen,但仍显示旧数据。我必须先去MainActivity获取新数据。我应该修改代码吗?

  3. 这是我的 DBHandler.java

    中的更新功能
    public int updateDataSiswa(Siswa siswa) {
        SQLiteDatabase db = this.getWritableDatabase();
    
        ContentValues values = new ContentValues();
        values.put(COLUMN_NOMOR, siswa.getNomor());
        values.put(COLUMN_NAMA, siswa.getNama());
    
        return db.update(TABLE_SISWA, values, COLUMN_ID + " = ?",
                new String[]{String.valueOf(siswa.getId())});
    }
    

    此处 DetailScreen.java

    public class DetailScreen extends AppCompatActivity {
            private TextView txt_resultnomor, txt_resultnama;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.screen_details);
    
            //put data
            Intent i = getIntent();
            final String id = i.getExtras().getString("id");
            final String nomor = i.getExtras().getString("nomor");
            final String nama = i.getExtras().getString("nama");
    
            //inisialisasi
            txt_resultnomor = (TextView) findViewById(R.id.txt_resultnomor);
            txt_resultnama = (TextView) findViewById(R.id.txt_resultnama);
    
            //set 
            txt_resultnomor.setText(nomor);
            txt_resultnama.setText(nama);
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
           getMenuInflater().inflate(R.menu.menu_detail, menu);
            return true;
        }
        public boolean onOptionsItemSelected(MenuItem item) {
           int id = item.getItemId();
    
            if (id == R.id.action_edit) {
                Intent in = new Intent(this, UpdateScreen.class);
                in.putExtra("nomor", txt_resultnomor.getText().toString());
                in.putExtra("nama", txt_resultnama.getText().toString());
                startActivity(in);
            }
            if (id == R.id.action_delete) {
                return true;
            }
            if (id == R.id.action_settings) {
                // Intent i = new Intent(this, About.class);
                //startActivity(i);
            }
    
            return super.onOptionsItemSelected(item);
        }
    
    
    
    }
    

    然后是我的 UpdateScreen.java

    public class UpdateScreen extends AppCompatActivity {
    
        private EditText et_nomor;
        private EditText et_nama;
    
        private Button button_updatedata;
    
        private DBHandler dbHandler;
        private SiswaAdapter adapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_update_screen);
    
            dbHandler = new DBHandler(this);
            initComponents();
        }
        private void initComponents(){
            et_nomor = (EditText) findViewById(R.id.et_nomor);
            et_nama = (EditText) findViewById(R.id.et_nama);
    
            //ambil data
            Intent in=getIntent();
            final String id=in.getExtras().getString("id_siswa");
            final String nomor=in.getExtras().getString("nomor");
            final String nama=in.getExtras().getString("nama");
    
    //set inisial 
            et_nomor.setText(nomor);
            et_nama.setText(nama);
    
            button_updatedata = (Button) findViewById(R.id.button_updatedata);
            button_updatedata.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    validasiForm();
                }
            });
        }
    
        private void validasiForm() {
            String form_nomor = et_nomor.getText().toString();
            String form_nama = et_nama.getText().toString();
    
            if (form_nomor.isEmpty()){
                et_nomor.setError("Nomor belum diisi");
                et_nomor.requestFocus();
            }
            else if (form_nama.isEmpty()){
                et_nama.setError("Nama belum diisi");
                et_nama.requestFocus();
            }
            else {
                dbHandler.updateDataSiswa(new Siswa(form_nomor, form_nama));
    
                List<Siswa> siswaList = dbHandler.getSemuaSiswa();
                adapter = new SiswaAdapter(siswaList);
                adapter.notifyDataSetChanged();
                Toast.makeText(UpdateScreen.this, "Berhasil Memperbarui Data Siswa", Toast.LENGTH_SHORT).show();
                MainSiswaActivity.mma.refresh();
                finish();
            }
        }
    }
    

    我希望我能说清楚,请帮助我。感谢。

1 个答案:

答案 0 :(得分:0)

您对public int updateDataSiswa(Siswa siswa)提供的更新方法的调用在哪里?同样基于您提供的内容...适配器的notifyDataSetChanged()只是尝试更新RecyclerView的列表视图。 但是它无法理解底层数据的变化..你需要为数据库处理程序创建一个方法,你可以在其中获取新记录列表。然后使用这个方法用它来更新你的适配器然后设置新的适配器到validasiForm()方法的listView .. 请查看此详细信息... Android ListView not refreshing after notifyDataSetChanged