1

У меня есть класс Books.java что implements список Book.java, а в MainActivity.java я заполняю библиотеку объектов книгами. Я хочу отправить библиотеку объектов от MainActivity.java до ListActivity.java, но не работает с i.putExtra. Как я могу это сделать?Как я могу передать объект класса между двумя действиями?

Books.java

import java.util.ArrayList; 
import java.util.List; 


public class Books implements DataAggregate <Book>{ 
private List<Book> books; 

public Books(){}; 

public List<Book> getAll() { 
    return this.getBooks(); 
} 

public int size() { 
    return this.getBooks().size(); 
} 

public void insert(Book element) { 
    this.getBooks().add(element); 
} 

public void delete(Book element) { 
    this.getBooks().remove(element); 
} 

private List<Book> getBooks() { 
    if (books==null){ 
     books=new ArrayList<Book>(); 
    } 
    return books; 
} 

}

MainActivity.java

Books library; 
for (int i = 0; i<db_books.size(); i++){ 
     String name = db_books.get(i).getBookName(); 
     String author = db_books.get(i).getBookAuthor(); 
     String epc = db_books.get(i).getBookEpc(); 
     Integer number = db_books.get(i).getNumBooks(); 
     Book myBook = new Book(name, author, epc, number); 
     library.insert(myBook); 
} 
Intent i = new Intent(getApplicationContext(),ListActivity.class); 
i.putExtra("library",library); 
startActivity(i); 

ListActivity.java

Books library = extras.getString("library"); 

Book.java

public class Book implements Serializable { 

    private String bookName; 
    private String bookAuthor; 
    private String bookEpc; 
    private Integer numBooks; 


    public Book(){ 

    } 

    public Book(String bname, String bauthor, String bepc, Integer nbooks){ 
     this.bookName = bname; 
     this.bookAuthor = bauthor; 
     this.bookEpc = bepc; 
     this.numBooks = nbooks; 
    } 

    public String getBookName() { 
     return bookName; 
    } 

    public void setBookName(String bookName) { 
     this.bookName = bookName; 
    } 

    public String getBookAuthor() { 
     return bookAuthor; 
    } 

    public void setBookAuthor(String bookAuthor) { 
     this.bookAuthor = bookAuthor; 
    } 

    public String getBookEpc() { 
     return bookEpc; 
    } 

    public void setBookEpc(String bookEpc) { 
     this.bookEpc = bookEpc; 
    } 

    public Integer getNumBooks() { 
     return numBooks; 
    } 

    public void setNumBooks(Integer numBooks) { 
     this.numBooks = numBooks; 
    } 

    public void prettyPrint(){ 

     Log.d("Book:", this.bookName+" "+this.bookAuthor+" "+this.bookEpc+" "+this.numBooks.toString()); 
    } 
} 
+0

См эту ссылку [] (http://stackoverflow.com/a/14333555/2078074). Надеюсь, это поможет вам. – Lawrance

+0

@Lawrance Я должен реализовать Books.java как Serializable? –

+0

@Lawrance не работает, 'java.lang.RuntimeException: не удается запустить активность. ComponentInfo {upf.mybooks/upf.mybooks.ListActivity}: java.lang.ClassCastException: upf.mybooks.model.Books нельзя отнести к java.util .List' –

ответ

0

Попробуйте это может быть помощь вам

послать как этот

Intent i = new Intent(getApplicationContext(),DetailedBookActivity.class); 
i.putExtra("library",library); 

и получить как этот

Book libs= new Book(); 
libs = (Book)getIntent().getSerializableExtra("library"); 
+0

это не работает, 'i.putExtra (библиотека« Библиотека », (Serializable));' –

+0

Он дает ошибку: FATAL EXCEPTION: main Процесс: upf.mybooks, PID: 27029 java.lang.ClassCastException : upf.mybooks.model.Books нельзя отнести к java.io.Serializable' –

+0

@JoanTriay, вы используете свое имя класса модели, например 'Books',' Book' и т. д. –

0

Вместо

Books library = extras.getString("library"); 

Вы должны сделать

Books library = (Books) extras. getSerializableExtra("library"); 
+0

Это не работает, 'FATAL EXCEPTION: main Процесс: upf.mybooks, PID: 30008 java.lang.ClassCastException: upf.mybooks.model.Books нельзя отбрасывать java.io.Serializable' –

0

Я решил таким образом:

пройти между двумя видами деятельности я использую это,

В MainActivity.java:

Intent intent=new Intent(getApplicationContext(),ListActivity.class); 
Bundle bundle=new Bundle(); 
bundle.putSerializable("library", library); 
intent.putExtras(bundle); 
startActivity(intent); 

В ListActivity.java для доступа к библиотеке:

Intent intent=this.getIntent(); 
Bundle bundle=intent.getExtras(); 
final Books library =(Books)bundle.getSerializable("library"); 

Конечный объект библиотеки в ListActivity.java имеет все книги.

0

Книги класса должны реализующий SERIALIZABLE

import java.util.ArrayList; 
import java.util.List; 


public class Books implements DataAggregate <Book>, Serializable { 
    private List<Book> books; 

    public Books(){}; 

    public List<Book> getAll() { 
    return this.getBooks(); 
    } 

    public int size() { 
     return this.getBooks().size(); 
    } 

    public void insert(Book element) { 
     this.getBooks().add(element); 
    } 

    public void delete(Book element) { 
     this.getBooks().remove(element); 
    } 

    private List<Book> getBooks() { 
     if (books==null){ 
      books=new ArrayList<Book>(); 
     } 
     return books; 
    } 
} 

MainActivity

Books library; 
for (int i = 0; i<db_books.size(); i++){ 
    String name = db_books.get(i).getBookName(); 
    String author = db_books.get(i).getBookAuthor(); 
    String epc = db_books.get(i).getBookEpc(); 
    Integer number = db_books.get(i).getNumBooks(); 
    Book myBook = new Book(name, author, epc, number); 
    library.insert(myBook); 
} 
// don't use applicationContext. use activity context "this". 
Intent i = new Intent(this, ListActivity.class); 
i.putExtra("library", library); 
startActivity(i); 

и ListActivity getIntent

Books library = (Books) getIntent().getSerializableExtra("library"); 
0

На мой взгляд, сначала вы должны использовать Parcelable. Подробнее см. Ссылки ниже.

Link1

Link2

0
first your Books class implements to Serializable. 


Intent i = new Intent(getApplicationContext(),ListActivity.class); 
i.putExtra("library",library); 
startActivity(i); 

get method 

Intent i = getIntent(); 
Book libs= new Book(); 
libs = (Book) i.getSerializableExtra("library"); 
Смежные вопросы