Как передать 2D массив из одного действия в другое (включая всю информацию, содержащуюся в массиве) - PullRequest
2 голосов
/ 10 ноября 2011

У меня есть настройка 2D-массива в Деятельности A, которую я хотел бы затем использовать в Деятельности B. Я просмотрел различные примеры в Интернете, но не могу заставить их работать должным образом.

Код ниже компилируется, но я получаю ошибку с моим тостом java.lang.nullpointerexception. так что мне кажется, что моя структура массива передается, но содержимое null. Любая помощь с благодарностью.

Вот то, что у меня есть.

Задание A

String[][] Question=new String[100][100];

Bundle b = new Bundle();
b.putSerializable("questionset", Question);
Intent intent = new Intent(this, QuizActivity.class);
startActivity(intent);

Деятельность B

    try{

        Bundle b=this.getIntent().getExtras();
        String[][] Questions = (String[][]) b.getSerializable("questionset");        
        Toast.makeText(this, Questions[2][1].toString(), Toast.LENGTH_SHORT).show();
    }

    catch(Exception e){
    Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();

    }

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Я всегда решаю эти проблемы с помощью класса объектов хранения, который является одноэлементным, и где я могу сохранить такие объекты.

public class Model
{
    private static Model instance;

    private Model()
    {
        // singleton implementation
    }

    /**
     * Returns a valid instance of the model.
     * 
     * @return THE instance of the model.
     */
    public static Model getInstance()
    {

        if (instance == null)
        {
            instance = new Model();
        }

        return instance;
    }

    private String[][] arr;
    // + getter and setter methods for arr
}
0 голосов
/ 10 ноября 2011
String[][] Question=new String[100][100]; 
Question[2][1]="sample";    // here
Bundle b = new Bundle(); 
b.putSerializable("questionset", Question); 
Intent intent = new Intent(this, QuizActivity.class); 
intent.putExtras(b);    // here
startActivity(intent); 

В вашем коде отсутствует инициализация содержимого массива и передача его в намерение. Это намеренно? Для меня приведенный выше код работает очень хорошо.

...