Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中使用sqlite插入时,如何获得不同的数据?_Android_Sqlite - Fatal编程技术网

在android中使用sqlite插入时,如何获得不同的数据?

在android中使用sqlite插入时,如何获得不同的数据?,android,sqlite,Android,Sqlite,我在按钮的点击事件上创建数据库,当我在下一个活动上启动select query时,两条相同的记录显示在列表视图中。我不明白发生了什么??请给我提个建议。我有以下代码: ListActivity.java package com.example.timerdemo2; import java.util.ArrayList; import android.R.menu; import android.os.Bundle; imp

我在按钮的点击事件上创建数据库,当我在下一个
活动
上启动select query时,两条相同的记录显示在
列表视图
中。我不明白发生了什么??请给我提个建议。我有以下代码:

ListActivity.java

  package com.example.timerdemo2;

        import java.util.ArrayList;

        import android.R.menu;
        import android.os.Bundle;
        import android.provider.ContactsContract.CommonDataKinds.Phone;
        import android.annotation.SuppressLint;
        import android.app.Activity;
        import android.content.Intent;
        import android.database.Cursor;
        import android.database.sqlite.SQLiteDatabase;
        import android.view.ContextMenu;
        import android.view.Menu;
        import android.view.MenuInflater;
        import android.view.MenuItem;
        import android.view.View;
        import android.view.ContextMenu.ContextMenuInfo;
        import android.view.View.OnClickListener;
        import android.widget.AdapterView;
        import android.widget.ArrayAdapter;
        import android.widget.Button;
        import android.widget.ListView;
        import android.widget.Toast;
        import android.widget.AdapterView.AdapterContextMenuInfo;

        public class ListActivity extends Activity {
            ListView lv;
            ArrayList<String> items = new ArrayList<String>();
            ArrayList<String> items_id = new ArrayList<String>();
            dbhelper dh;
            SQLiteDatabase db;
            int index_id;
            Button btn;

            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_list);
                Button btn;
                btn = (Button)findViewById(R.id.newProjectlist);
                btn.setOnClickListener(new OnClickListener() {

                    public void onClick(View v) {
                        // TODO Auto-generated method stub


                            Intent intent= new Intent(ListActivity.this,NewProject.class);
                        startActivity(intent);
                    }
                });  
                lv = (ListView)findViewById(R.id.projectListView);
                setUpList();
                dh = new dbhelper(this);
                Cursor c = getAllData();
                showAllData(c);  
                registerForContextMenu(lv);      
            }

          @Override
            public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenuInfo menuInfo) {
                // TODO Auto-generated method stub
                super.onCreateContextMenu(menu, v, menuInfo);

                if(v.getId() == R.id.projectList){
                    menu.setHeaderIcon(R.drawable.ic_launcher);
                    menu.setHeaderTitle("Record List");
                    menu.add(0,1,menu.NONE,"Delete Record");
                    menu.add(0,2,menu.NONE,"Show Record");
                }
            }

            @Override
        public boolean onContextItemSelected(MenuItem item) {
            // TODO Auto-generated method stub
                int itemId = item.getItemId();
                if(itemId == 1)
                {
                    AdapterView.AdapterContextMenuInfo menuinfo = (AdapterContextMenuInfo) item.getMenuInfo();
                    int poistion = menuinfo.position;
                    String id_string = items_id.get(poistion);
                    long id = Long.valueOf(id_string);

                    //menuinfo = (AdapterContextMenuInfo) item.getMenuInfo();
                    //index_id = menuinfo.position;
                    deleteUserData(index_id);
                    items_id.remove(poistion);
                }
                if(itemId == 2){
                    AdapterView.AdapterContextMenuInfo menuinfo;
                    menuinfo = (AdapterContextMenuInfo) item.getMenuInfo();
                    index_id = menuinfo.position;
                    editUserData(index_id);
                }
            return super.onContextItemSelected(item);
        }

            private void editUserData(int indexid) {
                // TODO Auto-generated method stub
                String user_id = items_id.get(indexid);
                Intent intEdit = new Intent(ListActivity.this, MainActivity.class);
                intEdit.putExtra("EditID", user_id);
                startActivityForResult(intEdit, 1);
            }

            private void deleteUserData(int indexid) {
                // TODO Auto-generated method stub
        //      String user_id = items_id.get(indexid);
                //Toast.makeText(getApplicationContext(), "id " + user_id, 1).show();
                db = dh.getWritableDatabase();
                db.delete("timer","_ID" + "=" + indexid, null);
                finish();
        //      Toast.makeText(getApplicationContext(), "Record deleted successfully", 1).show();
            }

            private void showAllData(Cursor c) {
                // TODO Auto-generated method stub
                while(c.moveToNext())
                {
                    int id = c.getInt(0);
                    String name = c.getString(1);
                    String timerpoint1 = c.getString(2);
                    String timerpoint2 = c.getString(3);
                    String timerpoint3 = c.getString(4);
                    String servicetime1 = c.getString(5);
                    String servicetime2 = c.getString(6);
                    items.add("" + name);
                    items_id.add(""+id);
                }
                setUpList();
            }

            private Cursor getAllData() {
                // TODO Auto-generated method stub
                db = dh.getReadableDatabase();
                //String sortorder = dh.Name + "DESC";
            //  String query ="SELECT DISTINCT name FROM timer";
            //  Cursor c = db.rawQuery(query, null);
            //   if (c != null) {
            //            c.moveToFirst();
            //        }
        //      String[] cols = new String[] {dh.Name, "name"};
                Cursor c = db.query(true, "timer",null,null,null,null,null,null, null);   
                //Cursor cur = db.query(Distinct,"timer", null, null, null, null, null, null, null);
                startManagingCursor(c);
                return c;   
                }
            private void setUpList() {
                // TODO Auto-generated method stub
                lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items));
            }   

            }

将此方法放入dbhelper类中

public Cursor get_dist(){
 SQLiteDatabase db = this.getReadableDatabase();
 String Distinct_Query="select distinct name from timer;";
 Cursor cursor=db.rawQuery(Distinct_Query,null);
 db.close();
 return cursor;
}
这将返回带有不同记录的游标

然后在活动中添加此代码

 dbhelper dh=new  dbhelper(this);
     Cursor c=dh.get_dist();

现在从游标c中检索记录。

它应该可以工作,可能是您的行彼此略有不同;您是否在emulator上进行测试?是否可以发布堆栈跟踪(logcat)?请在rawquery中提供正确的表名和列名;正如我所说的,我已经把临时名称放进了记事本,表名是“timer”,列名是“name”。很抱歉,使用这个代码记录不是显示而是插入相同的记录2次
 dbhelper dh=new  dbhelper(this);
     Cursor c=dh.get_dist();