Разбор данных, возвращающих кучу URL - PullRequest
0 голосов
/ 26 сентября 2018

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

public class MainActivity extends AppCompatActivity implements 
LoaderCallbacks<List<Book>> {

private static final int LOADER_ID=10;
public ArrayAdapter<Book> mAdapter;
private static final String DATA_API_REQUEST="https://www.googleapis.com/books/v1/volumes?q=android&maxResults=10";
private ListView LV;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getLoaderManager().initLoader(LOADER_ID,null,  MainActivity.this);
}

@NonNull
@Override
public Loader<List<Book>> onCreateLoader(int i, @Nullable Bundle bundle) {
    return new BookLoader(this,DATA_API_REQUEST);
}

@Override
public void onLoadFinished(android.content.Loader<List<Book>> loader, List<Book> data) {
    LV=(ListView)findViewById(R.id.ListView1);
    mAdapter=new ArrayAdapter<Book>(this,android.R.layout.simple_list_item_1,data);
    LV.setAdapter(mAdapter);
    if (data != null && !data.isEmpty()) {
        mAdapter.addAll(data);}
}

@Override
public void onLoaderReset(android.content.Loader<List<Book>> loader) {
    mAdapter.clear();
}

Обновление:

Использование

variable.tostring

дляпеременная, для которой вы устанавливаете TextView.Здесь вы устанавливаете объект напрямую, который текстовое представление не может преобразовать, поэтому вы можете преобразовать объект в строку

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Как я уже упоминал в комментарии, вам нужно перезаписать метод toString() вашего Book класса.

Что-то вроде этого в вашем Book классе:

@Override
public String toString() {
   return this.bookName;
}

Вывод метода toString по умолчанию для большинства объектов состоит из имени класса объекта, а также хеш-кода объекта, который обычно не соответствует предполагаемому.( Отсюда )

0 голосов
/ 26 сентября 2018

На самом деле вы печатаете целый объект, попробуйте использовать элемент, который вы хотите напечатать, например Book.name.toString (), а затем установите его в текстовом представлении, которое вы используете в адаптере.Далее также вставьте код адаптера, чтобы сообщество полностью поняло проблему.

...