2017-01-26 5 views
0

私は自分のデータベースに接続しているcursorAdapterを持っています。私は行が私のbottomListViewに表示されないように1行を削除し、TopListViewに表示するemployee_number列に基づいて新しいlistViewを設定します。また、ユーザーが下のlistViewをクリックすると、その行を取得して最上位のlistViewに追加します。私はdispalyBottomListを削除したい(データベースから削除しない)1行を除いて動作させ、topListを設定します。1つのリストから行を非表示にして別のものに表示します

public class MainActivity extends AppCompatActivity { 

    private ListView mTopList, mDirectReportList; 
    private ProgressBar mProgressBar; 
    private ArrayList<Employee> mEmployees = new ArrayList<>(); 
    private BottomListViewAdapter mBottomListViewAdapter; 
    EmployeeDBHandler dbHandler; 
    SQLiteDatabase db; 
    SimpleCursorAdapter simpleCursorAdapter; 
    private String startingEmployeeID = startingEmployeeID; 
    private String table = "employees"; 
    private static final String KEY_ID = "Employee_number"; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     dbHandler = new EmployeeDBHandler(getApplicationContext()); 
     mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
     mProgressBar.setVisibility(View.VISIBLE); 



     getXMLData(); 


     //GUI for seeing android SQLite Database in Chrome Dev Tools 
     Stetho.InitializerBuilder inBuilder = Stetho.newInitializerBuilder(this); 
     inBuilder.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this)); 
     Stetho.Initializer in = inBuilder.build(); 
     Stetho.initialize(in); 


    } 

    public void getXMLData() { 
     OkHttpClient client = getUnsafeOkHttpClient(); 
     Request request = new Request.Builder() 
       .url(getString(R.string.API_FULL_URL)) 
       .build(); 
     client.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 
       e.printStackTrace(); 
      } 

      @Override 
      public void onResponse(Call call, final Response response) throws IOException { 
       final String responseData = response.body().string(); 
       final InputStream stream = new ByteArrayInputStream(responseData.getBytes()); 
       final XMLPullParserHandler parserHandler = new XMLPullParserHandler(); 
       final ArrayList<Employee> employees = (ArrayList<Employee>) parserHandler.parse(stream); 

       for (Employee e : employees) { 
        dbHandler.addEmployee(e); 
       } 

       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         mProgressBar.setVisibility(View.GONE); 
         displayBottomList(); 
        } 
       }); 
      } 
     }); 
    } 

    public void displayTopList() {} 

    public void displayBottomList() { 
     EmployeeDBHandler handler = new EmployeeDBHandler(this); 
     SQLiteDatabase db = handler.getWritableDatabase(); 
     Cursor mBottomListCursor = db.rawQuery("SELECT * FROM employees", null); 

     ListView mBottomListView = (ListView) findViewById(R.id.mDirectReportList); 
     BottomListViewAdapter bottomAdapter = new BottomListViewAdapter(this, mBottomListCursor); 
     mBottomListView.setAdapter(bottomAdapter); 
    } 
} 

public class EmployeeDBHandler extends SQLiteOpenHelper { 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "OneTeam"; 
    private static final String TABLE_EMPLOYEE = "employees"; 

    //Employee table columns names 
    private static final String KEY_ID = "Employee_number"; 
    private static final String KEY_FIRST_NAME = "First_name"; 
    private static final String KEY_LAST_NAME = "Last_name"; 
    private static final String KEY_PHONE_NUMBER_MOBILE = "Phone_mobile"; 
    private static final String KEY_PHONE_NUMBER_OFFICE = "Phone_office"; 
    private static final String KEY_PAYROLL_TITLE = "Payroll_title"; 
    private static final String KEY_HAS_DIRECT_REPORTS = "Has_direct_reports"; 
    private static final String KEY_EMAIL = "Email"; 
    private static final String KEY_COST_CENTER = "Cost_center_id"; 
    private static final String KEY_THUMBNAIL_IMAGE = "ThumbnailData"; 
    private final static String DB_CLIENTS_ID = "_id"; 


    public EmployeeDBHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_EMPLOYEE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_EMPLOYEE + "(" 
       + DB_CLIENTS_ID + " INTEGER PRIMARY KEY," 
       + KEY_ID + " TEXT," 
       + KEY_FIRST_NAME + " TEXT," 
       + KEY_LAST_NAME + " TEXT," 
       + KEY_PHONE_NUMBER_MOBILE + " TEXT," 
       + KEY_PHONE_NUMBER_OFFICE + " TEXT," 
       + KEY_PAYROLL_TITLE + " TEXT," 
       + KEY_HAS_DIRECT_REPORTS + " TEXT," 
       + KEY_EMAIL + " TEXT," 
       + KEY_THUMBNAIL_IMAGE + " TEXT," 
       + KEY_COST_CENTER + " TEXT," 
       + "UNIQUE(" + KEY_ID + ")" 
       + ")"; 
     db.execSQL(CREATE_EMPLOYEE_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     //drop old table if existence 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_EMPLOYEE); 

     //Create table again 
     onCreate(db); 
    } 

    //Add new employee 
    public boolean addEmployee(Employee employee) { 
     SQLiteDatabase database = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(KEY_ID, employee.getEmployee_number()); 
     values.put(KEY_FIRST_NAME, employee.getFirst_name()); 
     values.put(KEY_LAST_NAME, employee.getLast_name()); 
     values.put(KEY_PHONE_NUMBER_MOBILE, employee.getPhone_mobile()); 
     values.put(KEY_PHONE_NUMBER_OFFICE, employee.getPhone_office()); 
     values.put(KEY_HAS_DIRECT_REPORTS, employee.getHas_direct_reports()); 
     values.put(KEY_EMAIL, employee.getEmail()); 
     values.put(KEY_COST_CENTER, employee.getCost_center_id()); 
     values.put(KEY_PAYROLL_TITLE, employee.getPayroll_title()); 
     values.put(KEY_THUMBNAIL_IMAGE, employee.getThumbnailData()); 


     //Inserting Row 
     database.replace(TABLE_EMPLOYEE, null, values); 
     database.close(); 
     return true; 
    } 

    //Get single employee 
    public Employee getEmployee(int employeeNumber) { 
     SQLiteDatabase database = this.getReadableDatabase(); 
     Employee employee = null; 

     Cursor cursor = database.query(TABLE_EMPLOYEE, new String[]{ 
         KEY_ID, KEY_FIRST_NAME, KEY_LAST_NAME, KEY_PHONE_NUMBER_OFFICE, KEY_PHONE_NUMBER_MOBILE, 
         KEY_HAS_DIRECT_REPORTS, KEY_EMAIL, KEY_COST_CENTER, KEY_PAYROLL_TITLE, KEY_THUMBNAIL_IMAGE}, KEY_ID + "=?", 
       new String[]{String.valueOf(employeeNumber)}, null, null, null, null); 
     if (cursor != null) { 
      if (cursor.moveToFirst()) { 
       employee = new Employee(cursor.getString(0), 
         cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), 
         cursor.getString(5), cursor.getString(6), cursor.getString(7), cursor.getString(8), 
         cursor.getString(9), cursor.getString(10), cursor.getString(11), cursor.getString(12), 
         cursor.getString(12), cursor.getString(14), cursor.getString(15), cursor.getString(16), 
         cursor.getString(17), cursor.getString(18), cursor.getString(19), cursor.getString(20), 
         cursor.getString(21), cursor.getString(22), cursor.getString(23), cursor.getString(24), 
         cursor.getString(24), cursor.getString(25), cursor.getString(26)); 
      } 
     } 
     cursor.close(); 
     database.close(); 
     return employee; 

    } 

    //Get All Employees 
    public ArrayList<Employee> getAllEmployees() { 
     ArrayList<Employee> employeeList = new ArrayList<>(); 
     //Select all query 
     String selectQuery = "SELECT * FROM " + TABLE_EMPLOYEE; 

     SQLiteDatabase database = this.getWritableDatabase(); 
     Cursor cursor = database.rawQuery(selectQuery, null); 

     //looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Employee employee = new Employee(); 
       employee.setEmployee_number(cursor.getString(cursor.getColumnIndex(KEY_ID))); 
       employee.setFirst_name(cursor.getString(cursor.getColumnIndex(KEY_FIRST_NAME))); 
       employee.setLast_name(cursor.getString(cursor.getColumnIndex(KEY_LAST_NAME))); 
       employee.setPhone_office(cursor.getString(cursor.getColumnIndex(KEY_PHONE_NUMBER_MOBILE))); 
       employee.setPhone_mobile(cursor.getString(cursor.getColumnIndex(KEY_PHONE_NUMBER_OFFICE))); 
       employee.setHas_direct_reports(cursor.getString(cursor.getColumnIndex(KEY_HAS_DIRECT_REPORTS))); 
       employee.setEmail(cursor.getString(cursor.getColumnIndex(KEY_EMAIL))); 
       employee.setCost_center_id(cursor.getString(cursor.getColumnIndex(KEY_COST_CENTER))); 
       employee.setPayroll_title(cursor.getString(cursor.getColumnIndex(KEY_PAYROLL_TITLE))); 
       employee.setThumbnailData(cursor.getString(cursor.getColumnIndex(KEY_THUMBNAIL_IMAGE))); 
      } while (cursor.moveToNext()); 
     } 

     //return employees list 
     return employeeList; 
    } 

    //Get Employee Count 
    public int getEmployeeCount() { 
     String countQuery = "SELECT * FROM " + TABLE_EMPLOYEE; 
     SQLiteDatabase database = this.getReadableDatabase(); 
     Cursor cursor = database.rawQuery(countQuery, null); 
     cursor.close(); 

     return cursor.getCount(); 
    } 

    //Updating single employee 
    public int updateEmployee(Employee employee) { 
     SQLiteDatabase database = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_FIRST_NAME, employee.getFirst_name()); 
     values.put(KEY_LAST_NAME, employee.getLast_name()); 
     values.put(KEY_PHONE_NUMBER_MOBILE, employee.getPhone_mobile()); 
     values.put(KEY_PHONE_NUMBER_OFFICE, employee.getPhone_office()); 
     values.put(KEY_HAS_DIRECT_REPORTS, employee.getHas_direct_reports()); 
     values.put(KEY_EMAIL, employee.getEmail()); 
     values.put(KEY_COST_CENTER, employee.getCost_center_id()); 
     values.put(KEY_PAYROLL_TITLE, employee.getPayroll_title()); 
     values.put(KEY_THUMBNAIL_IMAGE, employee.getThumbnailData()); 

     return database.update(TABLE_EMPLOYEE, values, KEY_ID + " = ?", 
       new String[]{String.valueOf(employee.getEmployee_number())}); 
    } 

    //Delete single employee 
    public void deleteEmployee(Employee employee) { 
     SQLiteDatabase database = this.getWritableDatabase(); 
     database.delete(TABLE_EMPLOYEE, KEY_ID + " = ?", 
       new String[]{String.valueOf(employee.getEmployee_number())}); 
     database.close(); 
    } 

    //delete row 
    public void delete(int id) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     if (db == null) { 
      return; 
     } 
     db.delete(TABLE_EMPLOYEE, "Employee+number = ?", new String[]{String.valueOf(id)}); 
     db.close(); 
    } 
} 

dbにカーソルを1つのemployee_numberを付けずに取り付けることはできますか? "empoyee_number"以外から選択したものはありますか?

答えて

-2

私はあなたが望んでいた正確に何を取得していないが、私はあなたが必要だと思う:

public Cursor getAllData(){ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    Cursor res =db.rawQuery("select * from "+TABLE_NAME,null); 
    return res; 
} 

またはあなたが

+0

Imがすでにデータベースからすべてのデータを取得し、何かを削除する必要はありません。これは私が欲しいものの完全なオポジトです。 –

+0

私はrawQueryのコードを書いているので、どのクエリーDudeでも入力することができます –

+0

public void delete(String id){ db.execSQL( "TBL_NAME +"はGoogle = '"+ id +"' ")から削除します。 } –

0

を見てみましょう助け

Cursor res =db.rawQuery("Delete from "+TABLE_NAME+" bla bla bla.",null); 

希望にクエリを変更することができますこの方法で

public void delete(String id) { 
    db.execSQL("delete from "+TBL_NAME+" where Google='"+id+"'"); 
} 

またはこれを試すことができます。

db.delete(TBL_NAME, "Google=?", new String[]{Integer.toString(id)});

関連する問題