【问题标题】:How I can pass class object between two activities?如何在两个活动之间传递类对象?
【发布时间】:2016-06-03 13:25:44
【问题描述】:

我有一个 Books.javaimplements Book.java 的列表,在 MainActivity.java 中我用书籍填充对象库。我想将对象库从MainActivity.java 发送到ListActivity.java 但不适用于i.putExtra. 我该怎么做?

书籍.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());
    }
}

【问题讨论】:

  • 请参阅此link。希望对你有帮助。
  • @Lawrance 我必须将 Books.java 实现为可序列化?
  • @Lawrance 不起作用,java.lang.RuntimeException: Unable to start activity ComponentInfo{upf.mybooks/upf.mybooks.ListActivity}: java.lang.ClassCastException: upf.mybooks.model.Books cannot be cast to java.util.List

标签: java android android-layout android-intent android-inflate


【解决方案1】:

代替

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

你应该这样做

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

【讨论】:

  • 那不行,FATAL EXCEPTION: main Process: upf.mybooks, PID: 30008 java.lang.ClassCastException: upf.mybooks.model.Books cannot be cast to java.io.Serializable
【解决方案2】:

我是这样解决的:

要在两个活动之间传递,我使用这个,

在 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 中的最终库对象包含所有书籍。

【讨论】:

    【解决方案3】:

    试试这个可能对你有帮助

    像这样发送

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

    然后变成这样

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

    【讨论】:

    • 这不行,i.putExtra("library", (Serializable) library);
    • 它给出了一个错误FATAL EXCEPTION: main Process: upf.mybooks, PID: 27029 java.lang.ClassCastException: upf.mybooks.model.Books cannot be cast to java.io.Serializable
    【解决方案4】:

    Books 类必须实现 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;
        }
    }
    

    主活动

    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 获取意图

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

    【讨论】:

      【解决方案5】:

      在我看来,首先你应该使用 Parcelable。有关详细信息,请参阅以下链接。

      Link1

      Link2

      【讨论】:

        【解决方案6】:
        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");
        

        【讨论】:

          猜你喜欢
          • 2013-06-11
          • 1970-01-01
          • 1970-01-01
          • 2014-12-08
          • 1970-01-01
          • 1970-01-01
          • 2013-05-12
          • 2013-04-11
          • 2013-06-21
          相关资源
          最近更新 更多