2016-02-16 3 views
0

первый вопрос, я начинаю с программирования java ..Как я могу получить значение Object из интерфейса обратного вызова?

У меня есть метод AssyncTask, который использует интерфейс для получения информации о пользователе, когда-то завершен, вызов сделан из OnPostExecute. Все хорошо, но как только я получаю данные по моей основной деятельности, я не могу извлечь пользователя из сделанного метода.

Я размещаю код для лучшего понимания.

new FetchUserDataAsyncTask(user, new GetUserCallBack() { 

       @Override 
       public void done(User returnedUser) { 

        String usernameRet = returnedUser.username; 
        String passwordRet = returnedUser.password; 
       } 

      }); 

и интерфейс:

public interface GetUserCallBack { 

    public abstract void done(User returnedUser); 
} 

AsynkTask:

public class FetchUserDataAsyncTask extends AsyncTask<Void, Void, User> { 

    RequestHandler rh = new RequestHandler(); 
    User user; 
    User ret_user; 
    GetUserCallBack usercallback; 


    public FetchUserDataAsyncTask(User user, GetUserCallBack usercallback){ 
     this.user = user; 
     this.usercallback = usercallback; 

    } 


    @Override 
    protected User doInBackground(Void... params) { 
     try { 
      HashMap<String, String> dataToSend = new HashMap<>(); 
      dataToSend.put("username", user.username); 
      dataToSend.put("password", user.password); 
      ret_user = rh.sendGetRequest("www.fjrmy.php", dataToSend); 
      return null; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return ret_user; 
    } 

    @Override 
    protected void onPostExecute(User returnedUser) { 
     super.onPostExecute(ret_user); 
     usercallback.done(returnedUser); 
    } 


} 

Я просто хочу, чтобы "извлечь" в usernameRet и passwordRet, чтобы работать с ними. Является ли это возможным?

Большое вам спасибо.

+0

Почему вы включили JavaScript-тег? Это совершенно другой язык. – Andy

+1

напишите свой код AsyncTask – F43nd1r

+0

Опубликовано @ F43nd1r –

ответ

-1

В вашем AsyncTask, вы возвращаетесь null в try блоке, если метод rh.sendGetRequest преуспевает, изменить что return ret_user;.

Вы также не звоните execute на свой AsyncTask в своем примере кода.

final User user = new User(); <--- declare a field or outer variable 

FetchUserDataAsyncTask task = new FetchUserDataAsyncTask(user, new GetUserCallBack() { 
     @Override 
     public void done(User retUser) { 
      user.username = retUser.username; // <--- set variables 
      user.password = retUser.password; // <--- 
     } 
}); 
task.execute(); // <----- missing this 
+0

Можете ли вы мне помочь с методом setName, пожалуйста? –

+0

Извините, набрал это неправильно, см. Правки –

+0

спасибо! это сработало –

0

Ваш AsnycTask всегда возвращает null. Удалить эту строку:

return null; 

холдинг Также к возвращаемому значению в AsyncTask не требуется. Это должно работать:

public class FetchUserDataAsyncTask extends AsyncTask<Void, Void, User> { 

    RequestHandler rh = new RequestHandler(); 
    User user; 
    GetUserCallBack usercallback; 


    public FetchUserDataAsyncTask(User user, GetUserCallBack usercallback){ 
     this.user = user; 
     this.usercallback = usercallback; 

    } 


    @Override 
    protected User doInBackground(Void... params) { 
     try { 
      HashMap<String, String> dataToSend = new HashMap<>(); 
      dataToSend.put("username", user.username); 
      dataToSend.put("password", user.password); 
      return rh.sendGetRequest("www.fjrmy.php", dataToSend); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(User returnedUser) { 
     super.onPostExecute(returnedUser); 
     usercallback.done(returnedUser); 
    } 


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