#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. Опубликуйте свою трассировку стека, чтобы я мог сам увидеть, в чем ошибка, пожалуйста.