如何将检索到的数据从SQLite显示到andriod中的表视图中

时间:2017-06-22 07:58:32

标签: android android-layout

我是Android开发的新手。我试图将检索到的数据从SQLite查看到表视图中。我创建了两个类Main和HelperAdapter。我花了 几分钟找到解决方案。但我没有找到任何有用的资源。

Main.java

public class Main extends Activity implements View.OnClickListener {
    private HelperAdapter hpAdp;
    private Button btnCreate,btnRead,btnPost;
    private LinearLayout llCreate,llRead;
    private EditText ptTitle,ptContent;
    private TextView tvRead;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        hpAdp = new HelperAdapter(this);

        btnCreate = (Button)findViewById(R.id.btnCreate);
        btnRead = (Button)findViewById(R.id.btnRead);
        btnPost = (Button)findViewById(R.id.btnPost);
        llCreate = (LinearLayout)findViewById(R.id.llCreate);
        llRead = (LinearLayout)findViewById(R.id.llRead);
        ptTitle = (EditText)findViewById(R.id.ptTitle);
        ptContent = (EditText)findViewById(R.id.ptContent);
        tvRead = (TextView)findViewById(R.id.tvRead);

        llCreate.setVisibility(View.VISIBLE);
        llRead.setVisibility(View.INVISIBLE);

        btnCreate.setOnClickListener(this);
        btnRead.setOnClickListener(this);
        btnPost.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnCreate:
                llCreate.setVisibility(View.VISIBLE);
                llRead.setVisibility(View.INVISIBLE);
                break;
            case R.id.btnRead:
                llCreate.setVisibility(View.INVISIBLE);
                llRead.setVisibility(View.VISIBLE);
                loadData();
                break;
            case R.id.btnPost:
                postData();
                break;
        }
    }

    private void postData() {
        String title = ptTitle.getText().toString();
        String content = ptContent.getText().toString();
        hpAdp.dbOpen();
        long id = hpAdp.postData(title, content);
        hpAdp.dbClose();
        if( id < 0 ) {
            Toast.makeText(getApplicationContext(),"Successfully Post", Toast.LENGTH_LONG);
        } else {
            Toast.makeText(getApplicationContext(),"Fail Post", Toast.LENGTH_LONG);
        }
    }

    private void loadData() {
        hpAdp.dbOpen();
        String str = hpAdp.loadData();
        tvRead.setText(str);
        hpAdp.dbClose();
    }
}

HelperAdapter.java

public class HelperAdapter {
    public SQLiteDatabase db;
    public Context context;
    public Helper hp;

    public HelperAdapter(Context context) {
        this.context = context;
    }

    public void dbOpen() {
        Helper hp = new Helper(context);
        db = hp.getWritableDatabase();
    }

    public long postData(String title, String content) {
        ContentValues cv = new ContentValues();
        cv.put(hp.PTITLE, title);
        cv.put(hp.PCONTENT, content);
        long id = db.insert(hp.TB_NAME,null,cv);
        return id;
    }

    public String loadData() {
        String[] columns = { hp. PID,hp.PTITLE,hp.PCONTENT };
        Cursor c = db.query(hp.TB_NAME,columns,null,null,null,null,null);
        StringBuilder sb = new StringBuilder();
        for( c.moveToFirst(); !c.isAfterLast(); c.moveToNext() ) {
            int PID = c.getColumnIndex(hp.PID);
            int PTT = c.getColumnIndex(hp.PTITLE);
            int PCT = c.getColumnIndex(hp.PCONTENT);
            sb.append("ID :"+ c.getString(PID) +"Title : "+c.getString(PTT) +"Content :"+c.getString(PCT));
        }
        return sb.toString();
    }

    public void dbClose() {
        db.close();
    }

    public class Helper extends SQLiteOpenHelper {
        private final static String DB_NAME = "blog";
        private final static String TB_NAME = "posts";
        private final static int DB_VERSION = 1;
        private final static String PID = "id";
        private final static String PTITLE = "title";
        private final static String PCONTENT = "content";

        public Helper(Context context) {
            super(context, DB_NAME, null, DB_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            String sql = "CREATE TABLE " + TB_NAME + " ( " +
                    "" + PID + " INTEGER PRIMARY KEY AUTOINCREMENT ," +
                    "" + PTITLE + " VARCHAR(200) NOT NULL," +
                    "" + PCONTENT + " TEXT NOT NULL)";
            db.execSQL(sql);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            String sql = "DELETE TABLE IF EXISTS " + TB_NAME + "";
            db.execSQL(sql);
            onCreate(db);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

尝试这种方式将数据设置为tableview

public class MainActivity extends Activity {
   private Context context;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      context=this;
      // Create DatabaseHelper instance
      DatabaseHelper dataHelper=new DatabaseHelper(context);
    // Insert sample data
      dataHelper.insertData("Kent","HoReCa");
      dataHelper.insertData("FineE","HoReCa");
      dataHelper.insertData("MKent","GTrade");
      dataHelper.insertData("MeviusLove","MTrade");
      dataHelper.insertData("XEMo","HoReCa");
      // Reference to TableLayout
      TableLayout tableLayout=(TableLayout)findViewById(R.id.tablelayout);
      // Add header row
      TableRow rowHeader = new TableRow(context);
      rowHeader.setBackgroundColor(Color.parseColor("#c0c0c0"));
      rowHeader.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
           TableLayout.LayoutParams.WRAP_CONTENT));
      String[] headerText={"ID","NAME","TYPE"};
      for(String c:headerText) {
        TextView tv = new TextView(this);
        tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
              TableRow.LayoutParams.WRAP_CONTENT));
        tv.setGravity(Gravity.CENTER);
        tv.setTextSize(18);
        tv.setPadding(5, 5, 5, 5);
        tv.setText(c);
        rowHeader.addView(tv);
      }
      tableLayout.addView(rowHeader);

      // Get data from sqlite database and add them to the table
      // Open the database for reading
      SQLiteDatabase db = dataHelper.getReadableDatabase();
      // Start the transaction.
      db.beginTransaction();

      try
      {
        String selectQuery = "SELECT * FROM "+ DatabaseHelper.TABLE_OUTLET;
        Cursor cursor = db.rawQuery(selectQuery,null);
        if(cursor.getCount() >0)
        {
           while (cursor.moveToNext()) {
              // Read columns data
              int outlet_id= cursor.getInt(cursor.getColumnIndex("outlet_id"));
              String outlet_name= cursor.getString(cursor.getColumnIndex("outlet_name"));
              String outlet_type= cursor.getString(cursor.getColumnIndex("outlet_type"));

              // dara rows
              TableRow row = new TableRow(context);
              row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
                   TableLayout.LayoutParams.WRAP_CONTENT));
              String[] colText={outlet_id+"",outlet_name,outlet_type};
              for(String text:colText) {
                TextView tv = new TextView(this);
                tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
                      TableRow.LayoutParams.WRAP_CONTENT));
                tv.setGravity(Gravity.CENTER);
                tv.setTextSize(16);
                tv.setPadding(5, 5, 5, 5);
                tv.setText(text);
                row.addView(tv);
              }
              tableLayout.addView(row);

           }

        }
        db.setTransactionSuccessful();

      }
      catch (SQLiteException e)
      {
        e.printStackTrace();

      }
      finally
      {
        db.endTransaction();
        // End the transaction.
        db.close();
        // Close database
      }
}

http://www.worldbestlearningcenter.com/tips/Android-sqlite-table-layout-example.htm