2013-12-15 5 views
0

Я хочу использовать async-http-client для отправки данных на сервер и сохранения SQLite на устройстве в синхронизации с этими данными. Поэтому в основном я хочу, чтобы все это к:Android async-http-client: добавить параметры для обратных вызовов?

  1. Инертных новым данным в SQLite
  2. сообщения новых данных к серверу с помощью асинхронного-HTTP-клиента
  3. Update SQLite строки в OnSuccess/OnFailure обратных вызовов с дополнительными данными

Мой вопрос: Как я могу получить правый идентификатор строки в AsyncHttpResponseHandler?

Позволяет создать простой пример (без подключения к базе данных, чтобы упростить эту задачу).

private void addPerson(name){ 

    //using a global client created like this in activity onCreate(): 
    //AsyncHttpClient client = new AsyncHttpClient(); 

    //here is a database insert creating a new row, returning the inserted id 
    int rowId = <some id returned by the insert>; 

    RequestParams param = new RequestParams(); 
    param.put("name", name); 

    client.post("http://www.my.service.url", param, new AsyncHttpResponseHandler() { 
    @Override 
    public void onSuccess(String response) { 
     //The response i get contains an additional value, lets say userkey. I want to update the right database row with that information. 
     //How to get the right rowId here? 
    } 
    }); 

}  

Так что это лучший способ достичь этого? Переопределение AsyncHttpResponseHandler каким-то образом добавляет параметр к функциям обратного вызова?

ответ

0

Сделайте свою переменную окончательными, как

final int rowId = <some id returned by the insert>; 
0

Это довольно просто, вы можете отправить RowId.

param.put ("_ id", rowId);

и, сервер отправляет его обратно клиенту.

Это хороший способ, потому что он позволяет вам создавать только один экземпляр AsyncHttpResponseHandler . (Хорошо, чтобы создать экземпляр как можно меньше)

+0

Я также реализовал это как один из способов сделать это, но я не был уверен, что это хорошая практика: не так ли? И: Что делать, если у меня нет доступа к серверу, тогда это может быть проблемой. – homtg

+0

@homtg Если у вас нет aceess, вы можете проверить, изменив параметры, такие как private void addPerson (rowId, name) – ceram1

Смежные вопросы