Android - 以表格形式显示来自sqlite的所有数据

时间:2016-04-08 04:40:56

标签: android textview android-sqlite

以下是我用于在单个textview中显示sqlite数据的代码。 到现在为止还挺好。但现在我需要数据以表格形式。我需要" billprint"字符串,因为我用它来打印打印设备中的细节。

那么,有没有什么方法可以在单个字符串文件中以表格形式打印/显示细节。?

private void displaydb() {
    // TODO Auto-generated method stub
    billprint = "";
    TextView tv = (TextView)findViewById(R.id.textView1);
    SQLiteDatabase myDB = null;

    try {
        myDB = getActivity().openOrCreateDatabase("shopcart1", android.content.Context.MODE_PRIVATE, null);

        String selectQuery = "SELECT  * FROM tbl_cartitems";
        Cursor c = myDB.rawQuery(selectQuery, null);

        int Column1 = c.getColumnIndex("productID");
        int Column2 = c.getColumnIndex("productName");
        int Column3 = c.getColumnIndex("productQuantity");
        int Column4 = c.getColumnIndex("productPrice");

        c.moveToFirst();
        if (c != null) {
            do {
                String pID = c.getString(Column1);
                String pName = c.getString(Column2);
                String pQua = c.getString(Column3);
                String pPri = c.getString(Column4);


                billprint = billprint +""+
                        pID+"   "+pName+"       "+""+pQua+"  "+pPri+"\n";
            } while (c.moveToNext());
        }

        tv.setText(pppid);
        tv.setTextSize(18F);
        tv.setTextColor(Color.RED);
    }

    catch (Exception e) {
        Toast.makeText(getActivity(), "Database Empty", Toast.LENGTH_LONG).show();
    } finally {
        if (myDB != null)
            myDB.close();
    }
}

到目前为止,输出采用以下形式:

prod-1 vanilla ice cream 1 15
prod-2 chocolate ice cream 5 50
prod-3 milk ice cream 10 150

但我想要的输出应该是表格形式,如:

prod-1 vanilla ice cream    1   15
prod-2 chocolate ice cream  5   50
prod-3 milk ice cream       10  150

layout(activity_testing.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.naji.productorder.Testing" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium" />

任何帮助将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:1)

不要使用这种编码标准。

  • 你应该通过在单独的类中拆分来分离Ui组件和Db操作。
  • 使用AsyncTask进行Db操作,并创建DTO类以保存从sqlite获取后要存储的数据
  • 在服务类中分离您的业务逻辑。 不要单班做所有操作。

答案 1 :(得分:0)

您可以使用WebView而不是TextView来显示。因为如果可以的话。此代码可以简化您的任务。

WebView webView;
    webView = (WebView) findViewById(R.id.webView);

    String billprint = "<table>";
    if (c != null) {
        do {

            String pID = c.getString(Column1);
            String pName = c.getString(Column2);
            String pQua = c.getString(Column3);
            String pPri = c.getString(Column4);

            billprint += "<tr>"
                + "<td>prod-"+pID+"</td>"
                + "<td>"+pName+"</td>"
                + "<td>"+pQua+"</td>"
                + "<td>"+pPri+"</td>"
                + "</tr>";
        } while (c.moveToNext());
    }
    billprint += "</table>";

    webView.loadDataWithBaseURL(null, billprint, "text/html", "utf-8", null);

希望这有帮助!

答案 2 :(得分:0)

如果使用等宽字体,则可以使用java格式化程序为每个项目分配N个(本例中为16个)字符。

对于比例字体不起作用,因为它们的宽度不同。

    StringBuilder sb = new StringBuilder();
    Formatter formatter = new Formatter(sb);

    String s1 = "foo";
    String s2 = "bar";
    String s3 = "foobar";
    String s4 = "hubba bubba";

    formatter.format("%16s %16s %16s %16s\n", s1, s2, s3, s4);
    formatter.format("%16s %16s %16s %16s\n", s4, s3, s2, s1);

    System.out.print(formatter);