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

发布于 2024-11-13 06:03:06 字数 2730 浏览 5 评论 0原文

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

我很感激任何帮助。谢谢。

这里的代码:

    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);

When my app is started, I get tiket from server that I use for sign response to server. This ticket (string) I save in database and when I run new response I get this tiket from database and attach to response. All was fine when I run responses from same activity where I save my ticket. I mean that when I am saving tiket, I also releases context of activity where I am executing this actions with database. BUT when I save tiket in one activity, launch another activity and try to get ticket from database in second activity, I get null (rown didn't contain item). So, can anybody tell me, where I'm erred?

I appreciate any help. Thank you.

Here code:

    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;
}

Here methods where I set access to database:

    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);
}

And here I have caught null insted of ticket:

        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);

But in another response all fine:

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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绿萝 2024-11-20 06:03:06

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

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

Alright the problem that I see is that String sign = account.getTicket();//here!

The account has to be null. So check what you are doing differently between the two other method calls you mentioned. You are doing something different with whatever account is.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文