2014-02-07 1 views
-1

Так что я начать с создания пользовательского объекта «Книга»Android Intent дополнительные атрибуты возвращают нулевые

Book b = new Book(id, title.getText().toString(),authors , isbn.getText().toString(), "$9.99"); 

Все эти параметры определены, а не нулевой. Затем я беру объект «b» и помещаю его в намерение следующим образом:

resultIntent.putExtra(BOOK_RESULT_KEY, b); 

Все еще хорошо. Получение объекта здесь получает именно то, что был введен в, ожидаемо:

Book test = (Book) resultIntent.getExtras().get(BOOK_RESULT_KEY); 

Отделка и вернуться к родительской деятельности с целью в результате:

setResult(RESULT_OK, resultIntent); 
finish(); 

Off к родительскому деятельности:

Book b = (Book) intent.getExtras().get(AddBookActivity.BOOK_RESULT_KEY); 

В этом заключается проблема. Все атрибуты этой объектной книги есть, кроме авторов []. Я получаю массив (авторы []) с правильной длиной, но каждый элемент в массиве теперь равен нулю. Я на 100 процентов уверен, что он был там, когда он был помещен в намерение. Почему я не могу получить содержимое этого массива?

+0

Является ли ваш класс книги применимым? – Raghunandan

+0

Вы не можете напрямую передать объект в Intent. Вам нужно передать его как «Bundle» и получить его из «Bundle». – GrIsHu

+0

реализовали класс книги с подробными данными? –

ответ

0

Использовать книгу в качестве реализации Сериализуемый и получаемый объект в следующей деятельности.

+1

Если он сделал с Parcelable, то в чем проблема? И почему Serializable, если Android дает Parcelable? –

+0

оба такие же, как функциональные, но я делаю это с использованием serialisable.parcelable тоже хорошо :) – Amish

+0

Мой дорогой друг IN android Serializable не очень хорош. –

2

Вы должны сделать свой Book класс Parcelable, а затем вы можете передать его в качестве Parcelable массива в Bundle и получить его непосредственно из Bundle.

Отъезд Simple Parcelable Example

Предполагая, что ваш код

public class Book implements Parcelable{ 

    private String id; 
    private String title; 
    private String authors; 
    private String isbn; 
    private String price; 
    // Constructor 
    public Student(String id, String title, String authors,String isbn,String price){ 
     this.id = id; 
     this.title= title; 
     this.authors = authors; 
     this.isbn=isbn; 
     this.price=price; 
    } 

    ...................................... 
     // Parcelling part 
    public Book(Parcel in){ 
     String[] data = new String[5]; 

     in.readStringArray(data); 
     this.id = data[0]; 
     this.title= data[1]; 
     this.authors= data[2]; 
     this.isbn= data[3]; 
     this.price= data[4]; 
    } 

    @Оverride 
    public int describeContents(){ 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeStringArray(new String[] {this.id, 
              this.title, 
              this.authors,this.isbn,this.price}); 
    } 
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
     public Book createFromParcel(Parcel in) { 
      return new Book(in); 
     } 

     public Book[] newArray(int size) { 
      return new Book[size]; 
     } 
    }; 
} 

Теперь после создания Parcelable класса вы можете передавать данные, как показано ниже:

resultIntent.putExtra(BOOK_RESULT_KEY,new Book(id, title.getText().toString(),authors , isbn.getText().toString(), "$9.99")); 

Получить данные из комплекта, как показано ниже:

Bundle data = getIntent().getExtras(); 

Book b = (Book)data.getParcelable(AddBookActivity.BOOK_RESULT_KEY); 

 Смежные вопросы

  • Нет связанных вопросов^_^