Android 实例-个人理财工具 之四 添加账单页面B

关键字: android sdk 1.0 SimpleCursorAdapter Spinner

 

这个星期,我考虑把添加账单的界面整下,完成该页面的功能.本来觉得很容易.可是在搞界面布局时就发现简直比写代码还难.

对于布局,基本上google不到有用的资料,而google demo 用到的最多就是listview.可我这个好像比它要复杂一点.

这周还有个问题郁闷了我很长时间就是spinner 和cursor 如何配合使用的问题,其实本来很简单的事情,可是我却被郁闷坏了.

 

先把我完成后的图片发出来.

 

界面的xml 是

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_height="fill_parent" android:layout_width="fill_parent">
  5. <LinearLayout android:id="@+id/LinearLayout01" android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent">
  6.     <LinearLayout android:id="@+id/LinearLayout02" android:layout_width="wrap_content" android:layout_height="wrap_content">
  7.         <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选择账目"  android:minWidth="80dip" android:textAppearance="?android:attr/textAppearanceLarge"></TextView>    
  8.         <EditText android:id="@+id/edittext_acctitem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="200dip" android:maxLines="1" android:editable="false" android:cursorVisible="false"></EditText>                 
  9.     </LinearLayout>
  10.     <View  android:layout_width="fill_parent" android:layout_height="1dip" android:background="?android:attr/listDivider"/>
  11.     <LinearLayout android:id="@+id/LinearLayout03" android:layout_width="wrap_content" android:layout_height="wrap_content">
  12.         <TextView android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="填入费用" android:minWidth="80dip" android:textAppearance="?android:attr/textAppearanceLarge"></TextView>
  13.         <EditText android:id="@+id/Fee" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numeric="decimal" android:width="160dip"></EditText>
  14.         <TextView android:id="@+id/TextView13" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="(元)" android:textAppearance="?android:attr/textAppearanceLarge"></TextView>           
  15.     </LinearLayout> 
  16.     <View  android:layout_width="fill_parent" android:layout_height="1dip" android:background="?android:attr/listDivider"/>
  17.     <LinearLayout android:id="@+id/LinearLayout04" android:layout_height="wrap_content" android:layout_width="fill_parent">
  18.         <TextView android:id="@+id/TextView02" android:layout_height="wrap_content" android:text="选择时间" android:layout_width="fill_parent" android:fadingEdge="horizontal" android:height="24dip" android:drawablePadding="2dip"></TextView>        
  19.     </LinearLayout>
  20.     
  21.     <LinearLayout android:id="@+id/LinearLayout05" android:layout_width="wrap_content" android:layout_height="wrap_content">
  22.         <TextView android:id="@+id/vdate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:width="120dip"></TextView>
  23.         <Button android:id="@+id/BtnDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+" android:textStyle="bold" android:textSize="24dip" android:height="30dip" android:width="30dip"></Button>
  24.         <TextView android:id="@+id/vtime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:width="80dip" android:gravity="center_horizontal"></TextView>
  25.         <Button android:id="@+id/BtnTime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+" android:textStyle="bold" android:textSize="24dip"></Button>     
  26.     </LinearLayout> 
  27.     <View  android:layout_width="fill_parent" android:layout_height="1dip" android:background="?android:attr/listDivider"/>
  28.     <LinearLayout android:id="@+id/LinearLayout06" android:layout_height="wrap_content" android:layout_width="fill_parent">
  29.         <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="账目类型"  android:minWidth="80dip" android:textAppearance="?android:attr/textAppearanceLarge"></TextView>
  30.         
  31.        <Spinner android:id="@+id/Spinner01" android:layout_height="wrap_content" android:minWidth="200dip" android:layout_width="wrap_content"></Spinner>
  32.     </LinearLayout> 
  33.     <View  android:layout_width="fill_parent" android:layout_height="1dip" android:background="?android:attr/listDivider"/>
  34.     <TextView android:id="@+id/TextView07" android:layout_height="wrap_content" android:text="填写备注" android:layout_width="fill_parent"  android:height="24dip" ></TextView>
  35.     <EditText android:id="@+id/EditTextDESC" android:layout_width="fill_parent" android:layout_height="wrap_content"  android:lines="4" android:gravity="top"></EditText>
  36.     <View  android:layout_width="fill_parent" android:layout_height="1dip" android:background="?android:attr/listDivider"/>
  37.     <LinearLayout android:id="@+id/LinearLayout08" android:layout_height="wrap_content" android:layout_width="fill_parent">
  38.     <Button android:id="@+id/BtnSave" android:width="160dip" android:text="保 存" android:textStyle="bold" android:textSize="24dip" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
  39.     <Button android:id="@+id/BtnCancel" android:width="160dip" android:text="取 消" android:textStyle="bold" android:textSize="24dip" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
  40.    
  41. </LinearLayout> 
  42.  <View  android:layout_width="fill_parent" android:layout_height="1dip" android:background="?android:attr/listDivider"/>
  43. </LinearLayout> 
  44. </ScrollView>

下面我们来看下spinner和cursor的用法.

主要就是一个SimpleCursorAdapter

代码如下

  1. s1=(Spinner) findViewById(R.id.Spinner01);        
  2.         String[] from= new String[]{"caption"};//需要显示游标里面的字段
  3.         int[] to=new int[]{android.R.id.text1};
  4.         Cursor cur=billdb.getUserid();     
  5.         SimpleCursorAdapter mAdapter=new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, cur,from, to);      
  6.         mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);           
  7.         s1.setAdapter(mAdapter);

我在这儿居然搞了2天,其实写法一直没错,可是每次抱未知的行 _ID. 这个错误我也知道就是使用SimpleCursorAdapter  该方法

的游标里面必须包括一个_ID的字段. 可是我的表里面肯定有的. 在我重试了无数次后发现,区分大小写. 我倒!

 

而事实上我建表的语句是

db.execSQL("Create table tusers (_id integer primary key autoincrement," +
     "caption text not null)");

而我在函数getUserid 里面cursor定义是

public Cursor getUserid(){
     Log.v("cola","run get users cursor");
     return db.query("tusers", new String[]{"_ID", "caption" }, null, null, null, null, null);     

    }

你单独测试这个cursor是没有问题的.

 

这都没用问题,也就是在这儿是不区分大小写的.但是如果你用这个cursor 绑定到SimpleCursorAdapter 这个里面去,一定要和建表语句的一致,不然就出错. 这儿把我郁闷坏了.

 

上面界面布局和这个spinner 搞定后,后面就是完善代码,完善界面的功能.没有新的地方了.

在用户选择完账目,填写费用,选择时间,账目类型后就保存进数据库bills表. 下周开始我计划使用一个grid把录入的数据显示出来,

还不知道grid支持横向滚动不,如果不支持估计又要自定义控件了.

 

附最新的代码Frm_Addbills.java

  1. package com.cola.ui;
  2. import java.util.Calendar;
  3. import java.util.TimeZone;
  4. import android.app.Activity;
  5. import android.app.AlertDialog;
  6. import android.app.DatePickerDialog;
  7. import android.app.Dialog;
  8. import android.app.TimePickerDialog;
  9. import android.content.DialogInterface;
  10. import android.content.Intent;
  11. import android.database.Cursor;
  12. import android.os.Bundle;
  13. import android.util.Log;
  14. import android.view.KeyEvent;
  15. import android.view.Menu;
  16. import android.view.MenuItem;
  17. import android.view.View;
  18. import android.view.View.OnClickListener;
  19. import android.widget.Button;
  20. import android.widget.DatePicker;
  21. import android.widget.EditText;
  22. import android.widget.SimpleCursorAdapter;
  23. import android.widget.Spinner;
  24. import android.widget.TextView;
  25. import android.widget.TimePicker;
  26. import android.widget.Toast;
  27. public class Frm_Addbills extends Activity implements OnClickListener {
  28.     EditText edittext_acctitem,EditTextDESC,Fee;
  29.     TextView mDate;
  30.     TextView mTime;
  31.     static final int RG_REQUEST = 0;
  32.     
  33.     private int mYear;
  34.     private int mMonth;
  35.     private int mDay;
  36.     private int mHour;
  37.     private int mMinute;
  38.     Spinner s1;
  39.     Button BtnDate,BtnTime;
  40.     Button BtnCancel,BtnSave;
  41.     
  42.     BilldbHelper billdb;
  43.     
  44.     int acctitemid=-1;
  45.     public void onCreate(Bundle icicle) {
  46.         super.onCreate(icicle);
  47.         setTitle("ColaBox-添加账单");       
  48.         setContentView(R.layout.frm_addbills);
  49.         
  50.         edittext_acctitem = (EditText)findViewById(R.id.edittext_acctitem);     
  51.         edittext_acctitem.setOnClickListener(this);
  52.         
  53.         EditTextDESC=(EditText)findViewById(R.id.EditTextDESC); 
  54.         Fee=(EditText)findViewById(R.id.Fee);   
  55.         
  56.         BtnDate=(Button)findViewById(R.id.BtnDate);
  57.         BtnDate.setOnClickListener(this);
  58.         BtnTime=(Button)findViewById(R.id.BtnTime);
  59.         BtnTime.setOnClickListener(this);
  60.         
  61.         BtnCancel=(Button)findViewById(R.id.BtnCancel);
  62.         BtnCancel.setOnClickListener(this);
  63.         BtnSave=(Button)findViewById(R.id.BtnSave);
  64.         BtnSave.setOnClickListener(this);
  65.         
  66.         mDate = (TextView) findViewById(R.id.vdate);
  67.         mTime = (TextView) findViewById(R.id.vtime);
  68.         
  69.         //Calendar c=Calendar.getInstance(Locale.CHINA);
  70.         initTime();
  71.         
  72.         
  73.         
  74.         setDatetime();
  75.         billdb = new BilldbHelper(this);
  76.         s1=(Spinner) findViewById(R.id.Spinner01);        
  77.         String[] from= new String[]{"caption"};
  78.         int[] to=new int[]{android.R.id.text1};
  79.         Cursor cur=billdb.getUserid();     
  80.         SimpleCursorAdapter mAdapter=new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, cur,from, to);      
  81.         mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);           
  82.         s1.setAdapter(mAdapter);
  83.      
  84.       
  85.     }
  86.     public boolean onCreateOptionsMenu(Menu menu) {
  87.         super.onCreateOptionsMenu(menu);
  88.         menu.add(0, 1, 0, "账目明细").setIcon(R.drawable.editbills);
  89.         menu.add(0, 2, 0, "账目统计").setIcon(R.drawable.editbills2);
  90.         menu.add(0, 3, 0, "账目报表").setIcon(R.drawable.billsum1);
  91.         menu.add(0, 4, 0, "退 出").setIcon(R.drawable.quit);
  92.         
  93.         return true;
  94.     }
  95.     public void onClick(View v) {
  96.         if (v.equals(edittext_acctitem)) {
  97.             Log.v("ColaBox""cmd=edittext_acctitem");
  98.             Intent intent = new Intent();
  99.             intent.setClass(Frm_Addbills.this, Frm_Editacctitem.class);         
  100.             startActivityForResult(intent, RG_REQUEST);
  101.         } else if (v.equals(BtnTime)){
  102.             showDialog(1);
  103.         } else if (v.equals(BtnDate)){
  104.             showDialog(2);
  105.         } else if (v.equals(BtnCancel)){
  106.             cancel();
  107.         } else if (v.equals(BtnSave)){
  108.             save();
  109.         }
  110.         
  111.     }
  112.     public boolean onOptionsItemSelected(MenuItem item) {
  113.         //Log.v("ColaBox", "getmenuitemid=" + item.getItemId());
  114.         switch (item.getItemId()) {
  115.         case 1:
  116.             return true;
  117.         case 2:
  118.             
  119.             return true;
  120.         case 3:
  121.             return true;
  122.         case 4:
  123.             QuitApp();
  124.             return true;
  125.         }
  126.         return false;
  127.     }
  128.     public void QuitApp() {
  129.         new AlertDialog.Builder(Frm_Addbills.this).setTitle("提示").setMessage(
  130.                 "确定退出?").setIcon(R.drawable.quit).setPositiveButton("确定",
  131.                 new DialogInterface.OnClickListener() {
  132.                     public void onClick(DialogInterface dialog, int whichButton) {  
  133.                         billdb.close();
  134.                         finish();
  135.                     }
  136.                 }).setNegativeButton("取消",
  137.                 new DialogInterface.OnClickListener() {
  138.                     public void onClick(DialogInterface dialog, int whichButton) {
  139.                     }
  140.                 }).show();
  141.     }
  142.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  143.         if (requestCode == RG_REQUEST) {
  144.             if (resultCode == RESULT_CANCELED) {
  145.                 // setTitle("Canceled...");
  146.             } else if (resultCode == RESULT_OK) {
  147.                 // setTitle((String)data.getCharSequenceExtra("DataKey"));
  148.                 edittext_acctitem.setText((String) data.getCharSequenceExtra("name"));
  149.                 acctitemid=Integer.parseInt((String)data.getCharSequenceExtra("id"));
  150.                 Log.v("cola","get acctitemid="+acctitemid);
  151.                 
  152.             }
  153.         }
  154.     }
  155.     
  156.     private void cancel(){
  157.         Log.v("cola","u put cancel btn");
  158.         edittext_acctitem.setText("");
  159.         Fee.setText("");
  160.         acctitemid=-1;
  161.         initTime();setDatetime();
  162.         EditTextDESC.setText("");
  163.     }
  164.     private void save(){
  165.         Log.v("cola","u put save btn");
  166.         if (acctitemid==-1){
  167.             new AlertDialog.Builder(this)
  168.                 .setMessage("请首先选择账目.")
  169.                 .show();
  170.             return;
  171.         }
  172.         int fee=0;
  173.         String s=Fee.getText().toString();
  174.         int pos=s.indexOf(".");
  175.         //Log.v("cola","i="+(s.length()-pos));
  176.         if (pos>0){ 
  177.             if (s.length()-pos<3){
  178.                 s=s+"0";
  179.             }
  180.             fee=Integer.parseInt(s.substring(0,pos)+s.substring(pos+1,pos+3));      
  181.         }else{          
  182.             fee=Integer.parseInt(s)*100;
  183.             
  184.         }
  185.         Log.v("cola","u put save btn");     
  186.         if (billdb.Bills_save(acctitemid,fee,(int)s1.getSelectedItemId(), ((TextView)mDate).getText().toString(), ((TextView)mTime).getText().toString(),EditTextDESC.getText().toString())){
  187.             Toast.makeText(this"保存成功.", Toast.LENGTH_SHORT).show(); 
  188.             cancel();
  189.         }else{
  190.             Toast.makeText(this"保存失败,请检查数据.", Toast.LENGTH_SHORT).show(); 
  191.         }
  192.     }
  193.     
  194.     public boolean onKeyDown(int keyCode, KeyEvent event) {
  195.         
  196.         switch (keyCode) {
  197.         case KeyEvent.KEYCODE_BACK:
  198.             QuitApp();
  199.             return true;
  200.             
  201.         }
  202.         return false;
  203.     }
  204.     private void initTime(){
  205.         Calendar c = Calendar. getInstance(TimeZone.getTimeZone("GMT+08:00"));
  206.         mYear = c.get(Calendar.YEAR);
  207.         mMonth = c.get(Calendar.MONTH);
  208.         mDay = c.get(Calendar.DAY_OF_MONTH);
  209.         mHour = c.get(Calendar.HOUR_OF_DAY);
  210.         mMinute = c.get(Calendar.MINUTE);
  211.     }
  212.     
  213.     private void setDatetime(){
  214.         mDate.setText(mYear+"-"+mMonth+"-"+mDay);
  215.         mTime.setText(pad(mHour)+":"+pad(mMinute));
  216.     }
  217.     
  218.     @Override
  219.     protected Dialog onCreateDialog(int id) {
  220.         switch (id) {
  221.             case 1:
  222.                 return new TimePickerDialog(this,
  223.                         mTimeSetListener, mHour, mMinute, false);
  224.             case 2:
  225.                 return new DatePickerDialog(this,
  226.                             mDateSetListener,
  227.                             mYear, mMonth, mDay);
  228.         }
  229.         return null;
  230.     }
  231.     @Override
  232.     protected void onPrepareDialog(int id, Dialog dialog) {
  233.         switch (id) {
  234.             case 1:             
  235.                 ((TimePickerDialog) dialog).updateTime(mHour, mMinute);
  236.                 break;
  237.             case 2:
  238.                 ((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay);
  239.                 break;
  240.         }
  241.     }    
  242.     
  243.     private DatePickerDialog.OnDateSetListener mDateSetListener =
  244.         new DatePickerDialog.OnDateSetListener() {
  245.             public void onDateSet(DatePicker view, int year, int monthOfYear,
  246.                     int dayOfMonth) {
  247.                 mYear = year;
  248.                 mMonth = monthOfYear;
  249.                 mDay = dayOfMonth;
  250.                 setDatetime();
  251.             }
  252.         };
  253.     private TimePickerDialog.OnTimeSetListener mTimeSetListener =
  254.         new TimePickerDialog.OnTimeSetListener() {
  255.             public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
  256.                 mHour = hourOfDay;
  257.                 mMinute = minute;
  258.                 setDatetime();
  259.             }
  260.         };
  261.     private static String pad(int c) {
  262.             if (c >= 10)
  263.                 return String.valueOf(c);
  264.             else
  265.                 return "0" + String.valueOf(c);
  266.         }        
  267. }

最新的billdbhelper.java

 

  1. package com.cola.ui;
  2. import android.content.Context;
  3. import android.database.Cursor;
  4. import android.database.sqlite.SQLiteDatabase;
  5. import android.util.Log;
  6. /**
  7.  * Provides access to a database of notes. Each note has a title, the note
  8.  * itself, a creation date and a modified data.
  9.  */
  10. public class BilldbHelper {
  11.     private static final String TAG = "Cola_BilldbHelper";
  12.     private static final String DATABASE_NAME = "cola.db";
  13.     
  14.     SQLiteDatabase db;
  15.     Context context;
  16.     
  17.     BilldbHelper(Context _context) {
  18.         context=_context;
  19.         db=context.openOrCreateDatabase(DATABASE_NAME, 0, null); 
  20.         Log.v(TAG,"db path="+db.getPath());
  21.     }
  22.     
  23.     public void CreateTable_acctitem() {
  24.         try{
  25.             db.execSQL("CREATE TABLE acctitem ("
  26.                     + "_ID INTEGER PRIMARY KEY,"
  27.                     + "PID integer,"
  28.                     + "NAME TEXT"               
  29.                     + ");");
  30.             Log.v("cola","Create Table acctitem ok");
  31.         }catch(Exception e){
  32.             Log.v("cola","Create Table acctitem err,table exists.");
  33.         }
  34.     }
  35.     
  36.     public void CreateTable_bills() {
  37.         try{
  38.             db.execSQL("CREATE TABLE bills ("
  39.                     + "_ID INTEGER primary key autoincrement,"
  40.                     +" acctitemid integer,"   
  41.                     + "fee integer,"
  42.                     + "userid integer,"
  43.                     + "sdate TEXT,"
  44.                     + "stime TEXT,"
  45.                     + "desc TEXT"                
  46.                     + ");");
  47.             
  48.             Log.v("cola","Create Table acctitem ok");
  49.         }catch(Exception e){
  50.             Log.v("cola","Create Table acctitem err,table exists.");
  51.         }
  52.     }
  53.     
  54.     public boolean Bills_save(int acctid,int fee,int userid,String date,String time,String text){
  55.         String sql="";
  56.         try{
  57.             sql="insert into bills values(null,"+acctid+","+fee+","+userid+",'"+date+"','"+time+"','"+text+"')";
  58.             db.execSQL(sql);
  59.             
  60.             Log.v("cola","insert Table bills ok");
  61.             return true;
  62.             
  63.         }catch(Exception e){
  64.             Log.v("cola","insert Table bills err="+sql);
  65.             return false;
  66.         }
  67.     }
  68.     
  69.     public void CreateTable_colaconfig() {
  70.         try{
  71.             db.execSQL("CREATE TABLE colaconfig ("
  72.                     + "_ID INTEGER PRIMARY KEY,"
  73.                     + "NAME TEXT"            
  74.                     + ");");
  75.             Log.v("cola","Create Table colaconfig ok");
  76.         }catch(Exception e){
  77.             Log.v("cola","Create Table acctitem err,table exists.");
  78.         }
  79.     }
  80.     
  81.     public void CreateTable_users() {
  82.         try{
  83.             db.execSQL("Create table tusers (_id integer primary key autoincrement," +
  84.                     "caption text not null)");
  85.             Log.v("cola","Create Table users ok");
  86.             db.execSQL("insert into tusers values (null,'个人')");
  87.             db.execSQL("insert into tusers values (null,'公司')");
  88.         }catch(Exception e){
  89.             Log.v("cola","Create Table tusers err,table exists.");
  90.         }
  91.     }
  92.     
  93.     public void InitAcctitem() {
  94.         try{
  95.           //s.getBytes(encoding);
  96.           db.execSQL("insert into acctitem values (1,null,'收入')");
  97.           db.execSQL("insert into acctitem values (2,1,'工资')");
  98.           db.execSQL("insert into acctitem values (9998,1,'其他')");
  99.           db.execSQL("insert into acctitem values (0,null,'支出')");
  100.           db.execSQL("insert into acctitem values (3,0,'生活用品')");
  101.           db.execSQL("insert into acctitem values (4,0,'水电煤气费')");
  102.           db.execSQL("insert into acctitem values (5,0,'汽油费')");
  103.           db.execSQL("insert into acctitem values (9999,0,'其他')");
  104.           
  105.           //db.execSQL("insert into bills values(100,135,10000,'','','备注')");
  106.           Log.v("cola","insert into ok"); 
  107.         }catch(Exception e)
  108.         {
  109.             Log.v("cola","init acctitem e="+e.getMessage());
  110.         }
  111.         
  112.     }
  113.     public void Acctitem_newitem(String text,int type){
  114.         
  115.         Cursor c =db.query("acctitem"new String[]{"max(_id)+1"}, "_id is not null and _id<9998"nullnullnullnull);
  116.         c.moveToFirst();
  117.         int maxid=c.getInt(0);      
  118.         String sql="insert into acctitem values ("+maxid+","+type+",'"+text+"')";
  119.         db.execSQL(sql);
  120.         Log.v("cola","newitem ok text="+text+" id="+type+" sql="+sql);
  121.         
  122.     }
  123.     
  124.     public void Acctitem_edititem(String text,int id){      
  125.         db.execSQL("update acctitem set name='"+text+"' where _id="+id);
  126.         Log.v("cola","edititem ok text="+text+" id="+id);
  127.     }
  128.     
  129.     public void Acctitem_delitem(int id){
  130.         
  131.         db.execSQL("delete from acctitem where _id="+id);
  132.         Log.v("cola","delitem ok id="+id);
  133.     }
  134.     
  135.     public void QueryTable_acctitem(){
  136.         
  137.     }
  138.     
  139.     public void FirstStart(){
  140.         try{
  141.             String col[] = {"type""name" };
  142.             Cursor c =db.query("sqlite_master", col, "name='colaconfig'"nullnullnullnull);
  143.             int n=c.getCount();
  144.             if (c.getCount()==0){
  145.                 CreateTable_acctitem();
  146.                 CreateTable_colaconfig();
  147.                 CreateTable_bills();
  148.                 CreateTable_users();
  149.                 InitAcctitem();         
  150.             }           
  151.             //test();           
  152.             Log.v("cola","c.getCount="+n+"");
  153.                     
  154.             
  155.         }catch(Exception e){
  156.             Log.v("cola","e="+e.getMessage());
  157.         }
  158.         
  159.         
  160.     }
  161.     
  162.     
  163.     public void close(){
  164.         db.close();
  165.     }
  166.     
  167.     public Cursor getParentNode(){
  168.         return db.query("acctitem"new String[]{"_id""name" }, "pid is null"nullnullnull"pid,_id");      
  169.   
  170.     }
  171.     
  172.     public Cursor getChildenNode(String pid){
  173.         Log.v("cola","run getchildenNode");
  174.         return db.query("acctitem"new String[]{"_id""name" }, "pid="+pid, nullnullnull"_id");     
  175.     }
  176.    
  177.     public Cursor getUserid(){
  178.         Log.v("cola","run get users cursor");
  179.         return db.query("tusers"new String[]{"_id""caption" }, nullnullnullnullnull);       
  180.     }
  181.     
  182.     public String test(){
  183.         try{
  184.             
  185.            
  186.             Cursor c2 =getUserid();
  187.             String ss="";  
  188.             c2.moveToFirst(); 
  189.             while(!c2.isAfterLast()){
  190.                 
  191.                 ss = c2.getString(0) +", "+ c2.getString(1);
  192.                 //byte b[]=c2.getString(1).getBytes();
  193.                 
  194.                 c2.moveToNext(); 
  195.                 
  196.                 Log.v("cola","ss="+ss+"");
  197.             }
  198.                 
  199.             return ss;
  200.         }catch(Exception e){
  201.             Log.v("cola","e="+e.getMessage());
  202.             return "err";
  203.         }
  204.     }
  205. }

##################

湖北武汉  2008-11-28 01:45

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值