`
jandroid
  • 浏览: 1933787 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

对于布局,基本上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" 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.  
    分享到:
    评论

相关推荐

    Android 个人理财工具三:添加账单页面 上

    总之,实现Android个人理财工具的账单页面涉及数据库设计、界面布局和数据适配器的使用。通过精心设计和代码实现,用户可以方便地添加和管理他们的财务记录,从而提高个人财务管理的效率。在后续的部分,开发者可能...

    Android应用小实例--炫酷计时器

    在这个“Android应用小实例--炫酷计时器”中,我们将深入探讨如何在Android应用中创建并定制一个功能丰富的计时器。 计时器组件在Android SDK中是`android.widget.Chronometer`类,它类似于一个倒计时定时器,但...

    个人理财通(Android).zip

    总结,个人理财通(Android)是Android平台上的一款实用理财工具,它结合了Android系统的特性和财务管理的需求,提供了全面的个人财务解决方案。虽然缺乏官方文档,但对于用户来说,它的直观界面和实用功能足以满足...

    Fragment实例-Android Studio项目

    在这个"Fragment实例-Android Studio项目"中,我们可以深入理解Fragment的使用方法以及如何在不同设备上适配。 1. **Fragment基本概念** Fragment是Activity的一部分,可以包含UI组件和业务逻辑。它们可以在一个...

    Android串口开发(android-serialport-api开发)工程实例

    Android串口开发(android-serialport-api开发)工程实例。SerialPortUtil里面有我常用的转换工具(16进制字符串转二进制字符串并补位、二进制字符串转16进制字符串并补位)

    android 实例源码 集合

    在Android开发领域,掌握实例源码是提升技能和理解系统工作原理的重要途径。"android 实例源码 集合" 提供了多种Android应用程序的源代码,这为我们提供了宝贵的参考资源,帮助开发者深入理解Android应用开发的各种...

    android-sdk-windows.rar

    4. 配置AVD(Android Virtual Device):通过AVD Manager创建模拟器实例,选择设备配置、系统镜像和硬件选项,以便在Windows上运行Android应用。 三、使用Android SDK进行开发 1. 创建项目:使用Android Studio,...

    Android 个人理财工具五:显示账单明细 上

    在Android应用开发中,创建一个个人理财工具的关键部分之一是展示用户的收支明细。在这个场景下,开发者需要从SQLite数据库中提取数据并将其呈现给用户。本文将深入探讨如何实现这一功能,特别是如何利用ListView和...

    Android-Universal-Image-Loader Demo和jar包

    《Android-Universal-Image-Loader:高效加载与缓存图片的解决方案》 在移动开发领域,尤其是Android平台,图片加载和缓存是一个重要的课题。Android-Universal-Image-Loader(简称UIL)是一款强大的开源库,专门...

    Android Fragment实例

    在Android应用开发中,Fragment是Android SDK中的一个重要组件,它被设计用来支持多屏幕适配和增强用户界面的模块化。Fragment允许开发者将应用程序的功能或UI部分分解为独立的、可重用的组件,这些组件可以在不同的...

    android-async-http-master

    为了使用这个库,开发者需要将其添加到项目的依赖库中,如果是使用Gradle构建系统,可以在`build.gradle`文件中添加依赖。然后,就可以在代码中创建`AsyncHttpClient`实例,配置请求参数,并注册回调来处理请求结果...

    Android-Adt-sdk(18-19)

    Android ADT SDK(Android Developer Tools Software Development Kit)是Android开发者用于构建、调试和发布Android应用程序的重要工具集。这个压缩包包含了版本18和19的SDK,分别对应Android 4.3 (API Level 18) ...

    android实例开发完全手册

    《Android实例开发完全手册》是一本深度探讨Android应用开发的实战型书籍,旨在通过丰富的实例帮助读者掌握Android开发的核心技术和实践技巧。这本书涵盖了从基础到高级的各个方面,为开发者提供了全面的学习路径。 ...

    android简单定位实例

    在Android平台上,实现简单的定位功能是一项常见的任务,它涉及到Android系统的地理位置服务,主要依赖于GPS(全球定位系统)以及网络定位技术。本实例将详细解析如何在Android应用中集成定位功能,让应用能够获取到...

    Android创意实例详解书籍源码

    《Android创意实例详解》这本书籍源码的分享,旨在为Android开发者提供丰富的实践案例和学习资源。这份源码集合涵盖了Android应用开发中的多种创新技术与设计思路,是深入理解和掌握Android开发技能的理想辅助资料。...

    Android Wi-Fi Direct 开发示例代码

    **Android Wi-Fi Direct 开发详解** Wi-Fi Direct,也称为Wi-Fi P2P(Peer-to-Peer),是一种无线网络连接技术,允许设备之间无需通过传统Wi-Fi接入点(如路由器)进行直接通信。这种技术在Android平台上被广泛用于...

    Android解决多个Fragment切换时布局重新实例化问题,并保存当前fragment页面,系统回收后还原之前fragment页面,更新版

    在Android应用开发中,Fragment是实现界面动态组合和交互的重要组件。然而,当涉及到多个Fragment之间的切换时,可能会遇到一个问题:每次切换时,Fragment的布局可能会被重新实例化,导致用户体验下降,例如丢失...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    android-support-v7-appcompat.rar with Palette

    Android Support Library v7 AppCompat库是Google为了兼容早期Android版本而推出的一个重要组件,它使得开发者可以将最新的Android设计元素和功能应用到Android 2.1(API级别7)及以上的设备上。此库包含了丰富的...

    matlab机构运动仿真simulink实例--四连杆机构

    matlab机构运动仿真simulink实例--四连杆机构

Global site tag (gtag.js) - Google Analytics