Как сохранить и получить данные в SQLite из двух разных действий?

#android #sqlite #get #save

#Android #sqlite #получить #Сохранить

Вопрос:

Когда мое приложение запускается, я получаю tiket с сервера, который я использую для отправки ответа серверу. Этот билет (строка) Я сохраняю в базе данных, и когда я запускаю новый ответ, я получаю этот запрос из базы данных и прикрепляю к ответу. Все было в порядке, когда я запускал ответы из того же действия, где я сохранял свой билет. Я имею в виду, что когда я сохраняю tiket, я также освобождаю контекст действия, в котором я выполняю эти действия с базой данных. НО когда я сохраняю tiket в одном действии, запускаю другое действие и пытаюсь получить ticket из базы данных во втором действии, я получаю null (строка не содержала элемент). Итак, кто-нибудь может сказать мне, где я допустил ошибку?

Я ценю любую помощь. Спасибо.

Вот код:

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

И здесь я обнаружил null вместо 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);
  

Но в другом ответе все в порядке:

 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. Опубликуйте свой код и журналы ошибок.

Ответ №1:

Хорошо, проблема, которую я вижу, заключается в том, что String sign = account.getTicket();//here!

Учетная запись должна быть нулевой. Итак, проверьте, что вы делаете по-разному между двумя другими вызовами метода, о которых вы упомянули. Вы делаете что-то другое с любой учетной записью.

Комментарии:

1. Нет-нет, экземпляр учетной записи не равен нулю. Проблема, когда я пытаюсь получить ticket. Прежде чем я помещу ticket в таблицу и когда я получу его для другого ответа, все в порядке. Но когда я пытаюсь получить запрос на этот ответ, таблица, в которой должен быть tiket, не содержит никаких строк.

2. Опубликуйте свою трассировку стека, чтобы я мог сам увидеть, в чем ошибка, пожалуйста.