簡體   English   中英

Livedata 觀察未運行

[英]Livedata Observe not running

我嘗試使用這個實現 ViewModel。 但是從不調用觀察。

基本上這個應用程序在 SAMPLE_URL 上發出網絡請求,將 JSON 轉換為 List 並通過 bookView 顯示列表。 該應用程序在沒有 ViewModel 的情況下運行良好。 使用 ViewModel 時,應用程序會運行,但不會調用觀察,也不會顯示任何數據。

我在這里做錯了什么?

圖書活動 class:

 public BookAdapter bookAdapter;
    ListView bookView;
    public final static String SAMPLE_URL = "https://www.googleapis.com/books/v1/volumes?q=search+terms";
    public ArrayList<Book> books = new ArrayList<>();
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activitymain);
        bookView = findViewById(R.id.list);
        bookAdapter = new BookAdapter(BookActivity.this,books);
        BookViewModel bookViewModel = new ViewModelProvider(this).get(BookViewModel.class);
        bookViewModel.getBooks().observe(this, books -> {
            Log.d("INSIDE", "observe");
            bookAdapter = new BookAdapter(this,books);
            bookView.setAdapter(bookAdapter);
            bookAdapter.notifyDataSetChanged();
        });
    }

BookViewModel class:

public class BookViewModel extends ViewModel {
    public MutableLiveData<List<Book>> books;
    public LiveData<List<Book>> getBooks(){
        if (books == null) {
            books = new MutableLiveData<>();
            loadBooks();
        }
        return books;
    }
    private void loadBooks() {
        thread.start();
    }
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            URL url = QueryUtility.createURL(BookActivity.SAMPLE_URL);
            try{
                assert url != null;
                String JSONResponse = QueryUtility.ReadFromStream(QueryUtility.MakeHTTPRequest(url));
                books = new MutableLiveData<>(QueryUtility.extractBooksFromJSON(JSONResponse));
            }
            catch (IOException | JSONException ioException){
                ioException.printStackTrace();
            }
        }
    });
}

您的線程為books創建了一個新的 MutableLiveData 實例。 您可能觀察到的原始延遲加載實例永遠不會更新。 您應該更新現有實例的值。

books.postValue(QueryUtility.extractBooksFromJSON(JSONResponse));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM