如何从两个不同的活动中保存和获取 SQLite 中的数据?

Posted

技术标签:

【中文标题】如何从两个不同的活动中保存和获取 SQLite 中的数据?【英文标题】:How save and get data in SQLite from two differen activity? 【发布时间】:2011-06-04 17:19:00 【问题描述】:

当我的应用程序启动时,我从服务器获取票证,用于对服务器进行签名响应。这张票(字符串)我保存在数据库中,当我运行新响应时,我从数据库中获取这张票并附加到响应中。当我从保存票证的同一活动中运行响应时,一切都很好。我的意思是,当我保存票证时,我还会发布活动上下文,我正在使用数据库执行此操作。但是,当我在一个活动中保存票证,启动另一个活动并尝试在第二个活动中从数据库中获取票证时,我得到空值(行不包含项目)。那么,谁能告诉我,我错在哪里了?

感谢您的帮助。谢谢。

这里代码:

    public long setTicket(Ticket ticket) throws SQLException 
    ContentValues insertValues = new ContentValues();
    insertValues.put(TicketTable.KEY_TICKET, ticket.getTicket());
    insertValues.put(TicketTable.KEY_RESULT_CODE, ticket.getResultCode());

    long result = m_db.insert(DATABASE_TABLE_TICKET, null, insertValues);

    return result;


public Ticket getTicket() throws SQLException 
    String[] columns =  TicketTable.KEY_ID, TicketTable.KEY_TICKET,
            TicketTable.KEY_RESULT_CODE ;
    Cursor cursor = getCursor(DATABASE_TABLE_TICKET, columns);

    Ticket result = new Ticket();
    result.setTicket(cursor.getString(TicketTable.TICKET_COLUMN));
    result.setResultCode(cursor.getString(TicketTable.RESULT_CODE_COLUMN));

    cursor.close();

    return result;

这里我设置访问数据库的方法:

    public String getTicket()
    DBAdapter adapter = new DBAdapter(m_context);
    adapter.open();
    String ticketEncoded = null;
    Ticket ticket = null;
    try 
        ticket = adapter.getTicket();
        ticketEncoded = java.net.URLEncoder.encode(ticket.getTicket());
     catch (SQLException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    finally
        adapter.close();
    

    return ticketEncoded;


public void saveTicketFromServer()
    GetTicketHandler handler = new GetTicketHandler(m_context);
    Ticket ticket = new Ticket();
    ticket.setCommand("getTicket");

    TicketTask task = new TicketTask(ticket);
    createTask(task, handler);

在这里,我发现票证为空:

        String comment = java.net.URLEncoder.encode(strToEncode, "UTF-8");
    String barcodeId = "4605246006340";
    String ball = "10";
    String sign = account.getTicket();//here!
    CreateCommentTask task = new CreateCommentTask(barcodeId, ball,
            comment, sign);
    //TODO create handler
    HttpService httpService = new HttpService();
    httpService.createTask(task, null);

但在另一个回应中一切都很好:

String sign = account.getTicket();
    try 
        task = new SearchBarcodeTask(searchForm, sign);
     catch (NoSuchAlgorithmException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    
    SearchBarcodeHandler handler = new SearchBarcodeHandler(m_activity);

    HttpService httpService = new HttpService();
    httpService.createTask(task, handler);

【问题讨论】:

发布您的代码和错误日志。 【参考方案1】:

好吧,我看到的问题是String sign = account.getTicket();//here!

帐户必须为空。因此,请检查您提到的其他两个方法调用之间的不同之处。无论帐户是什么,您都在做不同的事情。

【讨论】:

不,不,帐户实例不为空。当我尝试取票时出现问题。在我把票放在桌子上之前,当我拿到另一个回复时,一切都好。但是当我尝试获取此响应的票时,应该票的表不包含任何行。 发布您的堆栈跟踪,以便我自己查看错误是什么。

以上是关于如何从两个不同的活动中保存和获取 SQLite 中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

从一个活动获取变量到另一个活动

如何从列表视图中从 sqlite 检索数据单击并查看不同的活动 android studio

Android 从 Sqlite 数据库保存和获取图像

从 2 个不同片段的 sqlite 中的 2 个表中获取信息

如何从 Treeview / Tkinter (SQLite) 中的不同表中获取不同的值?

将数据从列表视图(从 Rest Api 生成)传递到另一个活动并将其保存到 SQLite 数据库中