简体   繁体   English

我如何在两个活动之间传递类对象?

[英]How I can pass class object between two activities?

I have a class Books.java that implements a list of Book.java , and in MainActivity.java i fill the object library with books. 我有一个implements Books.java列表的Book.java ,在MainActivity.java我用书籍填充对象库。 I want send the object library from MainActivity.java to ListActivity.java but not works with i.putExtra. 我想将对象库从MainActivity.java发送到ListActivity.java但不能与i.putExtra.一起i.putExtra. How I can do it? 我怎么能这样做?

Books.java 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 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 ListActivity.java

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

Book.java 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());
    }
}

Try this may be help to you 试试这可能对你有所帮助

send like this 像这样发送

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

and get like this 并得到这样的

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

Instead of 代替

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

You should do 你应该做

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

I solved in this way: 我这样解决了:

To pass between two activities I use this, 为了在两个活动之间传递我使用它,

In MainActivity.java: 在MainActivity.java中:

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

In ListActivity.java to caputre the library: 在ListActivity.java中设置库:

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

Final library object in ListActivity.java has all books. ListActivity.java中的最终库对象包含所有书籍。

Books class have to implements Serializable 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;
    }
}

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);

and ListActivity getIntent 和ListActivity getIntent

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

In my opinion first you should use Parcelable. 在我看来,首先你应该使用Parcelable。 For more details refer below links. 有关详细信息,请参阅以下链接

Link1 链接1

Link2 LINK2

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");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM