保存android应用程序中已更改数据库的状态

时间:2012-05-30 08:47:19

标签: android database sqlite

我正在开发一个Android应用,其中第一页是主页。点击主页上的任何项目,用户可以查看该项目中的详细信息。详细信息来自sqlite数据库,可由用户在应用程序中接受或拒绝。在用户接受或拒绝时,详细信息将从详细信息列表中删除。但是,当从详细信息页面单击后退按钮时,当用户再次到达主页时,会出现这样的问题:当用户再次单击同一项目时,它会显示所有详细信息而不保存状态。

E.g。如果我的item1有10个详细信息..我查看详细信息页面中的所有10个详细信息..然后接受2 ..所以总共保留8 ..但是当我点击返回并到达主页并再次点击item1时,它显示再次全部10 ...并且不记录2被接受时发生的变化。

如何解决这个问题?


这是我们正在处理的代码:

package com.sql.nigel;


import java.util.ArrayList;

    public class listActivity extends ListActivity implements
    android.view.View.OnClickListener,OnItemClickListener{
    private ArrayList<listActivity2> m_orders = null;
    private OrderAdapter m_adapter;
    private Runnable viewOrders;
    private SQLiteDatabase database;
    private MySQLiteHelper dbHelper=new MySQLiteHelper(this);
    private String[] leave_Col =   {"Requester","LeaveType","No_of_Days","FromDate","ToDate"};
    private String[] Cart_Col = {"CartNo","Date","Description","TotalValue","TotalTax","BudgetValue","UniqueNo"};
    private String[] Time_Col = {"Name","Date","Project","Client","Tasks","FromDate","ToDate"};
    private String[] Travel_Col = {"Requester","Purpose","Location","Cost","Date","Description","FromDate","ToDate","Hotel","Taxi","AdditionalExp"};
    private String[] Invoice_Col = {"InvoiceNo","VendorName","Date","InvoiceValue","Date","VendorNo","PostingDate","FiscalYear","Pln_Group"};
    private String[] Purchase_Col = {"PONo","Date","Vendor","OrderValue","PurchasingOrg","ApprovedVendor","Requester","Notes","RelatedInfo","QualityScore"};
    String table_name;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listactivity);

        database = dbHelper.getWritableDatabase();
        table_name=this.getIntent().getExtras().getString("activity");        

        Button backButton = (Button)findViewById(R.id.back);
        backButton.setOnClickListener(this);

        Button selectButton = (Button)findViewById(R.id.select);
        selectButton.setOnClickListener(this);

        /*    ImageView rightarrow = (ImageView)findViewById(R.id.rightarrow);
        rightarrow.setOnClickListener(this);*/

        m_orders = new ArrayList<listActivity2>();
        this.m_adapter = new OrderAdapter(this, R.layout.listactivity2, m_orders);
        setListAdapter(this.m_adapter);


        ListView listView=(ListView)findViewById(android.R.id.list);
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                if(table_name.compareTo("LeaveRequest")==0){
                    Intent intent = new Intent(listActivity.this, leavedetails.class); 
                    Bundle b = new Bundle(); //Create bundle
                    b.putInt("key",position); //Your id 
                    intent.putExtras(b); //Put your id to your next Intent 
                    startActivity(intent); //Call intent                    
               }else if(table_name.compareTo("Time")==0){
                   Intent intent = new Intent(listActivity.this, timedetails.class);
                   Bundle b = new Bundle(); //Create bundle
                    b.putInt("key",position); //Your id 
                    intent.putExtras(b); //Put your id to your next Intent 
                    startActivity(intent); //Call intent
                }else if(table_name.compareTo("ShoppingCart")==0){
                    Intent intent = new Intent(listActivity.this, cartdetails.class); 
                    Bundle b = new Bundle(); //Create bundle
                    b.putInt("key",position); //Your id 
                    intent.putExtras(b); //Put your id to your next Intent 
                    startActivity(intent); //Call intent
                }else if(table_name.compareTo("Invoice")==0){
                    Intent intent = new Intent(listActivity.this, invoicedetails.class);
                    Bundle b = new Bundle(); //Create bundle
                    b.putInt("key",position); //Your id 
                    intent.putExtras(b); //Put your id to your next Intent 
                    startActivity(intent); //Call intent
                }else if(table_name.compareTo("PurchaseOrder")==0){
                    Intent intent = new Intent(listActivity.this, purchasedetails.class); 
                    Bundle b = new Bundle(); //Create bundle
                    b.putInt("key",position); //Your id 
                    intent.putExtras(b); //Put your id to your next Intent 
                    startActivity(intent); //Call intent 
                }else if(table_name.compareTo("Travel")==0){
                    Intent intent = new Intent(listActivity.this, traveldetails.class);
                    Bundle b = new Bundle(); //Create bundle
                    b.putInt("key",position); //Your id 
                    intent.putExtras(b); //Put your id to your next Intent 
                    startActivity(intent); //Call intent

                }



            }
            });



        viewOrders = new Runnable(){
            public void run() {
                getOrders();
            }
        };

        Thread thread =  new Thread(null, viewOrders, "MagentoBackground");
        thread.start();

    }
    private Runnable returnRes = new Runnable() {

        public void run() {
            if(m_orders != null && m_orders.size() > 0){
                m_adapter.notifyDataSetChanged();
                for(int i=0;i<m_orders.size();i++)
                m_adapter.add(m_orders.get(i));
            }

            m_adapter.notifyDataSetChanged();
        }
    };
    private void getOrders(){
          try{
              m_orders = new ArrayList<listActivity2>();

              if(table_name.compareTo("LeaveRequest")==0){display_Leave();                            
              }else if(table_name.compareTo("Time")==0){display_Time(); 
              }else if(table_name.compareTo("ShoppingCart")==0){display_Cart(); 
              }else if(table_name.compareTo("Invoice")==0){display_Invoice(); 
              }else if(table_name.compareTo("PurchaseOrder")==0){display_Purchase(); 
              }else if(table_name.compareTo("Travel")==0){display_Travel(); 
              }

              Log.i("ARRAY", ""+ m_orders.size());
            } catch (Exception e) { 
              Log.e("BACKGROUND_PROC", e.getMessage());
            }
            runOnUiThread(returnRes);
            database.close();
        }
    public void display_Leave(){
          TextView heading=(TextView)findViewById(R.id.heading);
          heading.setText("Leave Request");
          Cursor c_L = database.query("LeaveRequest",leave_Col, null, null, null, null, null);
          c_L.moveToFirst();        
          while (!c_L.isAfterLast()) {              
          listActivity2 o1 = new listActivity2();             
          o1.setOrdertext1(""+c_L.getString(0));
          o1.setOrdertext2(""+c_L.getString(2)+" days");
          o1.setOrdertext3(""+c_L.getString(1)+" ");
          o1.setOrdertext4(""+c_L.getString(3)+" to "+c_L.getString(4));                        
          m_orders.add(o1);
          c_L.moveToNext();              
          } c_L.close();            
      }
    public void display_Time(){
      TextView heading=(TextView)findViewById(R.id.heading);
      heading.setText("Time Booking");
      Cursor c_L = database.query("Time",Time_Col, null, null, null, null, null);
          c_L.moveToFirst();        
          while (!c_L.isAfterLast()) {              
          listActivity2 o1 = new listActivity2();             
        o1.setOrdertext1(""+c_L.getString(0));
        o1.setOrdertext2(""+c_L.getString(3));
        o1.setOrdertext3(""+c_L.getString(2)+" ");
        o1.setOrdertext4(""+c_L.getString(1));                          
        m_orders.add(o1);
        c_L.moveToNext();              
          } c_L.close();            
    }
    public void display_Cart(){
          TextView heading=(TextView)findViewById(R.id.heading);
          heading.setText("Shopping Cart");
          Cursor c_L = database.query("ShoppingCart",Cart_Col, null, null, null, null, null);
          c_L.moveToFirst();        
          while (!c_L.isAfterLast()) {              
          listActivity2 o1 = new listActivity2();             
          o1.setOrdertext1(""+c_L.getString(0));
          o1.setOrdertext2("");
          o1.setOrdertext3(""+c_L.getString(2)+" ");
          o1.setOrdertext4(""+c_L.getString(1));                        
          m_orders.add(o1);
          c_L.moveToNext();              
          } c_L.close();            
      }
    public void display_Invoice(){
          TextView heading=(TextView)findViewById(R.id.heading);
          heading.setText("Invoice Approval");
          Cursor c_L = database.query("Invoice",Invoice_Col, null, null, null, null, null);
          c_L.moveToFirst();        
          while (!c_L.isAfterLast()) {              
          listActivity2 o1 = new listActivity2();             
          o1.setOrdertext1(""+c_L.getString(1));
          o1.setOrdertext2("");
          o1.setOrdertext3(""+c_L.getString(0)+" ");
          o1.setOrdertext4(""+c_L.getString(2));                        
          m_orders.add(o1);
          c_L.moveToNext();              
          } c_L.close();            
      }
    public void display_Purchase(){
      TextView heading=(TextView)findViewById(R.id.heading);
      heading.setText("Purchase Order");
      Cursor c_L = database.query("PurchaseOrder",Purchase_Col, null, null, null, null, null);
          c_L.moveToFirst();        
          while (!c_L.isAfterLast()) {              
          listActivity2 o1 = new listActivity2();             
        o1.setOrdertext1(""+c_L.getString(0));
        o1.setOrdertext2(""+c_L.getString(3));
        o1.setOrdertext3(""+c_L.getString(2)+" ");
        o1.setOrdertext4(""+c_L.getString(1));                          
        m_orders.add(o1);
        c_L.moveToNext();              
          } c_L.close();            
    }
    public void display_Travel(){
          TextView heading=(TextView)findViewById(R.id.heading);
          heading.setText("Travel Approval");
          Cursor c_L = database.query("Travel",Travel_Col, null, null, null, null, null);
          c_L.moveToFirst();        
          while (!c_L.isAfterLast()) {              
          listActivity2 o1 = new listActivity2();             
          o1.setOrdertext1(""+c_L.getString(1));
          o1.setOrdertext2(""+c_L.getString(3));
          o1.setOrdertext3(""+c_L.getString(2)+" ");
          o1.setOrdertext4(""+c_L.getString(4));                        
          m_orders.add(o1);
          c_L.moveToNext();              
          } c_L.close();            
      }
    private class OrderAdapter extends ArrayAdapter<listActivity2> {

        private ArrayList<listActivity2> items;

        public OrderAdapter(Context context, int textViewResourceId, ArrayList<listActivity2> items) {
                super(context, textViewResourceId, items);
                this.items = items;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                if (v == null) {
                    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.listactivity2, null);
                }
                listActivity2 o = items.get(position);
                if (o != null) {
                        TextView t1 = (TextView) v.findViewById(R.id.textList1);
                        TextView t2 = (TextView) v.findViewById(R.id.textList2);
                        TextView t3 = (TextView) v.findViewById(R.id.textList3);
                        TextView t4 = (TextView) v.findViewById(R.id.textList4);
                        if (t1 != null) {
                              t1.setText(o.getOrdertext1());           
                        }
                        if(t2 != null){
                              t2.setText(o.getOrdertext2());
                        }
                        if(t3 != null){
                              t3.setText(o.getOrdertext3());
                        }
                        if(t4 != null){
                              t4.setText(o.getOrdertext4());
                        }
                }
                return v;
        }
}

    public void onClick(View v) {

        switch(v.getId())
        {
        case R.id.back:
            Intent backIntent = new Intent(listActivity.this, SqlTwoActivity.class); 

            startActivity(backIntent);                  
            break;

        case R.id.select:
            Intent selectIntent = new Intent(listActivity.this, checkappear.class);
            selectIntent.putExtra("checkappear", table_name);
            startActivity(selectIntent);                    
            break;  
        /*  
        case R.id.rightarrow:
            Intent rightarrow = new Intent(listActivity.this, listActivity.class);
            startActivity(rightarrow);                  
            break;*/        
        }
    }
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub

    }
}

1 个答案:

答案 0 :(得分:0)

很难在代码中找到数据库调用。一些通用指南:

首先,您需要在单独的线程中封装对数据库的所有调用。 完成后,请务必关闭光标和数据库连接。 最好是使用AsyncTask。查看一些使用SQLite和AsyncTask的教程 - 它将自动为您处理单独的线程。

第二 - 阅读关于Activity Stack的内容,以便@Peter告诉你的内容是有道理的。