Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android個人理財工具實例之四:添加賬單頁面 下

Android個人理財工具實例之四:添加賬單頁面 下

編輯:Android開發實例

       本文考慮把賬單界面整理下,實現如下圖中的功能。做之前感覺應該不難,但實際做時發現排列界面布局甚至比編寫程序代碼還要復雜。網上搜索發現,關於這種布局的資料能用的很少,Google Demo中用的最多的就是Listview了,但本實例的界面似乎要復雜一些。

       spinner和cursor如何配合使用成了完成此實例過程中的難點,本來應該很簡單,但卻把我郁悶壞了。

       先給大家貼上最終的效果圖片:

Android個人理財工具實例之四:添加賬單頁面 下

       界面的xml:

XML/HTML代碼
  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。

       代碼如下:

Java代碼
  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的字段,可是我的表裡面肯定有的,在我重試了無數次後發現,區分大小寫,我倒!

       而事實上我建表的語句是:

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

       而我在函數getUserid 裡面cursor定義是:

Java代碼
  1. public Cursor getUserid(){   
  2.      Log.v("cola","run get users cursor");   
  3.      return db.query("tusers", new String[]{"_ID", "caption" }, null, null, null, null, null);        
  4.   
  5. }  

       你單獨測試這個cursor是沒有問題的。

       這都沒用問題,也就是在這兒是不區分大小寫的。但是如果你用這個cursor 綁定到SimpleCursorAdapter 這個裡面去,一定要和建表語句的一致,不然就出錯。這兒把我郁悶壞了。

       上面界面布局和這個spinner 搞定後,後面就是完善代碼,完善界面的功能,沒有新的地方了。

       在用戶選擇完賬目,填寫費用,選擇時間,賬目類型後就保存進數據庫bills表。 

       附最新的代碼Frm_Addbills.java:

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.         setDatetime();   
  73.         billdb = new BilldbHelper(this);   
  74.         s1=(Spinner) findViewById(R.id.Spinner01);           
  75.         String[] from= new String[]{"caption"};   
  76.         int[] to=new int[]{android.R.id.text1};   
  77.         Cursor cur=billdb.getUserid();        
  78.         SimpleCursorAdapter mAdapter=new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, cur,from, to);         
  79.         mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);              
  80.         s1.setAdapter(mAdapter);   
  81.         
  82.          
  83.     }   
  84.     public boolean onCreateOptionsMenu(Menu menu) {   
  85.         super.onCreateOptionsMenu(menu);   
  86.         menu.add(0, 1, 0, "賬目明細").setIcon(R.drawable.editbills);   
  87.         menu.add(0, 2, 0, "賬目統計").setIcon(R.drawable.editbills2);   
  88.         menu.add(0, 3, 0, "賬目報表").setIcon(R.drawable.billsum1);   
  89.         menu.add(0, 4, 0, "退 出").setIcon(R.drawable.quit);   
  90.            
  91.         return true;   
  92.     }   
  93.     public void onClick(View v) {   
  94.         if (v.equals(edittext_acctitem)) {   
  95.             Log.v("ColaBox", "cmd=edittext_acctitem");   
  96.             Intent intent = new Intent();   
  97.             intent.setClass(Frm_Addbills.this, Frm_Editacctitem.class);            
  98.             startActivityForResult(intent, RG_REQUEST);   
  99.         } else if (v.equals(BtnTime)){   
  100.             showDialog(1);   
  101.         } else if (v.equals(BtnDate)){   
  102.             showDialog(2);   
  103.         } else if (v.equals(BtnCancel)){   
  104.             cancel();   
  105.         } else if (v.equals(BtnSave)){   
  106.             save();   
  107.         }   
  108.            
  109.     }   
  110.     public boolean onOptionsItemSelected(MenuItem item) {   
  111.         //Log.v("ColaBox", "getmenuitemid=" + item.getItemId());   
  112.         switch (item.getItemId()) {   
  113.         case 1:   
  114.             return true;   
  115.         case 2:   
  116.                
  117.             return true;   
  118.         case 3:   
  119.             return true;   
  120.         case 4:   
  121.             QuitApp();   
  122.             return true;   
  123.         }   
  124.         return false;   
  125.     }   
  126.     public void QuitApp() {   
  127.         new AlertDialog.Builder(Frm_Addbills.this).setTitle("提示").setMessage(   
  128.                 "確定退出?").setIcon(R.drawable.quit).setPositiveButton("確定",   
  129.                 new DialogInterface.OnClickListener() {   
  130.                     public void onClick(DialogInterface dialog, int whichButton) {     
  131.                         billdb.close();   
  132.                         finish();   
  133.                     }   
  134.                 }).setNegativeButton("取消",   
  135.                 new DialogInterface.OnClickListener() {   
  136.                     public void onClick(DialogInterface dialog, int whichButton) {   
  137.                     }   
  138.                 }).show();   
  139.     }   
  140.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
  141.         if (requestCode == RG_REQUEST) {   
  142.             if (resultCode == RESULT_CANCELED) {   
  143.                 // setTitle("Canceled...");   
  144.             } else if (resultCode == RESULT_OK) {   
  145.                 // setTitle((String)data.getCharSequenceExtra("DataKey"));   
  146.                 edittext_acctitem.setText((String) data.getCharSequenceExtra("name"));   
  147.                 acctitemid=Integer.parseInt((String)data.getCharSequenceExtra("id"));   
  148.                 Log.v("cola","get acctitemid="+acctitemid);   
  149.                    
  150.             }   
  151.         }   
  152.     }   
  153.        
  154.     private void cancel(){   
  155.         Log.v("cola","u put cancel btn");   
  156.         edittext_acctitem.setText("");   
  157.         Fee.setText("");   
  158.         acctitemid=-1;   
  159.         initTime();setDatetime();   
  160.         EditTextDESC.setText("");   
  161.     }   
  162.     private void save(){   
  163.         Log.v("cola","u put save btn");   
  164.         if (acctitemid==-1){   
  165.             new AlertDialog.Builder(this)   
  166.                 .setMessage("請首先選擇賬目.")   
  167.                 .show();   
  168.             return;   
  169.         }   
  170.         int fee=0;   
  171.         String s=Fee.getText().toString();   
  172.         int pos=s.indexOf(".");   
  173.         //Log.v("cola","i="+(s.length()-pos));   
  174.         if (pos>0){    
  175.             if (s.length()-pos<3){   
  176.                 s=s+"0";   
  177.             }   
  178.             fee=Integer.parseInt(s.substring(0,pos)+s.substring(pos+1,pos+3));         
  179.         }else{             
  180.             fee=Integer.parseInt(s)*100;   
  181.                
  182.         }   
  183.         Log.v("cola","u put save btn");        
  184.         if (billdb.Bills_save(acctitemid,fee,(int)s1.getSelectedItemId(), ((TextView)mDate).getText().toString(), ((TextView)mTime).getText().toString(),EditTextDESC.getText().toString())){   
  185.             Toast.makeText(this, "保存成功.", Toast.LENGTH_SHORT).show();    
  186.             cancel();   
  187.         }else{   
  188.             Toast.makeText(this, "保存失敗,請檢查數據.", Toast.LENGTH_SHORT).show();    
  189.         }   
  190.     }   
  191.        
  192.     public boolean onKeyDown(int keyCode, KeyEvent event) {   
  193.            
  194.         switch (keyCode) {   
  195.         case KeyEvent.KEYCODE_BACK:   
  196.             QuitApp();   
  197.             return true;   
  198.                
  199.         }   
  200.         return false;   
  201.     }   
  202.     private void initTime(){   
  203.         Calendar c = Calendar. getInstance(TimeZone.getTimeZone("GMT+08:00"));   
  204.         mYear = c.get(Calendar.YEAR);   
  205.         mMonth = c.get(Calendar.MONTH);   
  206.         mDay = c.get(Calendar.DAY_OF_MONTH);   
  207.         mHour = c.get(Calendar.HOUR_OF_DAY);   
  208.         mMinute = c.get(Calendar.MINUTE);   
  209.     }   
  210.        
  211.     private void setDatetime(){   
  212.         mDate.setText(mYear+"-"+mMonth+"-"+mDay);   
  213.         mTime.setText(pad(mHour)+":"+pad(mMinute));   
  214.     }   
  215.        
  216.     @Override  
  217.     protected Dialog onCreateDialog(int id) {   
  218.         switch (id) {   
  219.             case 1:   
  220.                 return new TimePickerDialog(this,   
  221.                         mTimeSetListener, mHour, mMinute, false);   
  222.             case 2:   
  223.                 return new DatePickerDialog(this,   
  224.                             mDateSetListener,   
  225.                             mYear, mMonth, mDay);   
  226.         }   
  227.         return null;   
  228.     }   
  229.     @Override  
  230.     protected void onPrepareDialog(int id, Dialog dialog) {   
  231.         switch (id) {   
  232.             case 1:                
  233.                 ((TimePickerDialog) dialog).updateTime(mHour, mMinute);   
  234.                 break;   
  235.             case 2:   
  236.                 ((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay);   
  237.                 break;   
  238.         }   
  239.     }       
  240.        
  241.     private DatePickerDialog.OnDateSetListener mDateSetListener =   
  242.         new DatePickerDialog.OnDateSetListener() {   
  243.             public void onDateSet(DatePicker view, int year, int monthOfYear,   
  244.                     int dayOfMonth) {   
  245.                 mYear = year;   
  246.                 mMonth = monthOfYear;   
  247.                 mDay = dayOfMonth;   
  248.                 setDatetime();   
  249.             }   
  250.         };   
  251.     private TimePickerDialog.OnTimeSetListener mTimeSetListener =   
  252.         new TimePickerDialog.OnTimeSetListener() {   
  253.             public void onTimeSet(TimePicker view, int hourOfDay, int minute) {   
  254.                 mHour = hourOfDay;   
  255.                 mMinute = minute;   
  256.                 setDatetime();   
  257.             }   
  258.         };   
  259.     private static String pad(int c) {   
  260.             if (c >= 10)   
  261.                 return String.valueOf(c);   
  262.             else  
  263.                 return "0" + String.valueOf(c);   
  264.         }           
  265. }   

       最新的billdbhelper.java :

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", null, null, null, null);   
  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'", null, null, null, null);   
  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.         }catch(Exception e){   
  155.             Log.v("cola","e="+e.getMessage());   
  156.         }           
  157.     }   
  158.        
  159.        
  160.     public void close(){   
  161.         db.close();   
  162.     }   
  163.        
  164.     public Cursor getParentNode(){   
  165.         return db.query("acctitem", new String[]{"_id", "name" }, "pid is null", null, null, null, "pid,_id");              
  166.     }   
  167.        
  168.     public Cursor getChildenNode(String pid){   
  169.         Log.v("cola","run getchildenNode");   
  170.         return db.query("acctitem", new String[]{"_id", "name" }, "pid="+pid, null, null, null, "_id");        
  171.     }   
  172.       
  173.     public Cursor getUserid(){   
  174.         Log.v("cola","run get users cursor");   
  175.         return db.query("tusers", new String[]{"_id", "caption" }, null, null, null, null, null);          
  176.     }   
  177.        
  178.     public String test(){   
  179.         try{                 
  180.             Cursor c2 =getUserid();   
  181.             String ss="";     
  182.             c2.moveToFirst();    
  183.             while(!c2.isAfterLast()){                      
  184.                 ss = c2.getString(0) +", "+ c2.getString(1);   
  185.                 //byte b[]=c2.getString(1).getBytes();   
  186.                    
  187.                 c2.moveToNext();    
  188.                    
  189.                 Log.v("cola","ss="+ss+"");   
  190.             }                      
  191.             return ss;   
  192.         }catch(Exception e){   
  193.             Log.v("cola","e="+e.getMessage());   
  194.             return "err";   
  195.         }   
  196.     }   
  197. }  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved