Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
FRCJocker
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 4
#1

Передача двойного массива в другое активити - Программирование Android

30.12.2013, 04:47. Просмотров 1903. Ответов 6
Метки нет (Все метки)

Доброго времени суток, возникла проблема с массивом!
Пытаюсь передать через putExtra двойной массив в другое активити и оно не хочет принимать его.
Может надо привести к виду более приятному или передать другим способом в конце концов?
Собственно массив Chest[21][4].

MainActivity
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
    Button btnAll,btnArm,btnBack,btnChest,btnHip,btnLeg,btnStomach;
    RadioGroup radioGroup;  
 
    public static final String[][] Chest={
        {"1","0","m. pectoralis major","clavicula"},
        {"2","0","m. pectoralis major","manubnum et corpussterni"},
        {"3","0","m. pectoralis major","cartilagines costae 2 #8211 7"},
        {"4","1","m. pectoralis major","crista tuverculi majoris human"},
        {"5","0","m. pectoralis minor","costae 3-5"},
        {"6","1","m. pectoralis minor","pr. coracoideus scapulae"},
        {"7","0","m. subclavius","cartilagines costae 1"},
        {"8","1","m. subclavius","extrenulas acronuales claviculae"},
        {"9","0","m. serratus arterior","costae 1 #8211 9"},
        {"10","1","m. serratus arterior","margo medialis et argulus interior scapule"},
        {"11","0","m. intercostales externi","margo interior costae(up)"},
        {"12","1","m. intercostales externi","margo superior costae(down)"},
        {"13","0","m. intercostales interni","margo superior costae(down)"},
        {"14","1","m. intercostales interni","margo inferior costae(up)"},
        {"15","0","m. transversus thoracis","pr. xiphoideos et sterni"},
        {"16","1","m. transversus thoracis","costae 2 #8211 6"},
        {"17","0","m. subcostales","costae 10 #8211 12"},
        {"18","1","m. subcostales","внутр. пов-ть влагалищных ребер"},
        {"19","0","m. levatores coastrum","pr. transversus cerv 7"},
        {"20","0","m. levatores coastrum","pr. transversus thor 1 #8211 11"},
        {"21","1","m. levatores coastrum","argulus costae"}
};
 
@Override
protected void onCreate(Bundle savedInstanceState){
                ...
}
 
public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, TestActivity.class);
        
        switch (v.getId()) {
        ..
        case R.id.btnChest:
            switch (radioGroup.getCheckedRadioButtonId()) {
            case R.id.radioStart:
                intent.putExtra("state", 0);
                intent.putExtra("massive",Chest);
              break;
            case R.id.radioClose:
                intent.putExtra("state", 1);
                intent.putExtra("massive",Chest);
              break;
            }
            startActivity(intent);
            break;
            ..
        }
      }
TestActivity
Java
1
2
3
4
5
6
7
8
    String[][] test;
    Integer state;
        protected void onCreate(Bundle savedInstanceState) {
                ...
        test=(String[][]) getIntent().getExtras().get("massive");
        state=getIntent().getExtras().getInt("state");  
                ...
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2013, 04:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача двойного массива в другое активити (Программирование Android):

Передача двойного массива в другое активити - Программирование Android
помогите с передачей данных из адаптера в активити из двойного массива, мне нужно так чтобы соблюдалось id по нажатию на кнопку, если...

Передача данных в другое активити - Программирование Android
Доброго времени суток, возникла проблема со списком! Собственно нужно выбранный элемент из списка передать в другую активность и...

Передача константы в другое активити - Программирование Android
Здравствуйте. Задача такая: нужно из одного активити передать в другое константу с именем xml файла. т.е. в первом активити при...

Передача с одного активити в другое - Программирование Android
Помогите!!!Есть два активити в первом я ввожу данные в editText как мне сделать передачу в listview другого активити.Я сделал но у меня...

Не передаются значения при их передаче в другое активити - Программирование Android
Собственно, обработчик по клику в первом активти: Intent shopintent = new Intent(MainActivity.this, Shop.class); ...

Как вызвать другое активити в контексном меню - Программирование Android
Как вызвать другое активити в контексном меню

6
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 514
30.12.2013, 09:32 #2
Выложите полный код второго активити.
0
FRCJocker
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 4
30.12.2013, 10:48  [ТС] #3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.example.anatomy;
 
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class TestActivity extends Activity {
    
    String[][] test;
    ListView lvMain;
    Integer state,size;
    ArrayList<String> alCon = new ArrayList<String>();
    ArrayList<String> alName = new ArrayList<String>();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        test=(String[][]) getIntent().getExtras().get("massive");
        state=getIntent().getExtras().getInt("state");
        for(int i=0;i<test.length;i++){
            if(test[i][1]==Integer.toString(state)){
                alCon.add(test[i][3]);
                alName.add(test[i][2]);
            }
        }
        //alCon.size();
        String[] myArray = {};
        myArray = alCon.toArray(new String[alCon.size()]);
        lvMain = (ListView) findViewById(R.id.lvMain);
        lvMain.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_multiple_choice, myArray);
 
        lvMain.setAdapter(adapter);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.test, menu);
        return true;
    }
 
}
Код пока в сыром виде, сначала хотел проверить передаются ли данные, но собственно на этом пока и остановился.
0
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
30.12.2013, 11:01 #4
Вот так можно получить доступ ко всем элементами двумерного массива во второй активити:
Java
1
2
3
4
5
6
7
8
9
10
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Intent i = getIntent();
        Object entries[] = (Object[]) i.getExtras().get("massive");
        for (Object obj : entries) { 
            System.out.println(Arrays.toString((String[]) obj));
        }
    }
В результате в логкат выведется вот это:
12-30 10:54:46.855: I/System.out(5599): [1, 0, m. pectoralis major, clavicula]
12-30 10:54:46.855: I/System.out(5599): [2, 0, m. pectoralis major, manubnum et corpussterni]
12-30 10:54:46.855: I/System.out(5599): [3, 0, m. pectoralis major, cartilagines costae 2 #8211 7]
12-30 10:54:46.855: I/System.out(5599): [4, 1, m. pectoralis major, crista tuverculi majoris human]
12-30 10:54:46.855: I/System.out(5599): [5, 0, m. pectoralis minor, costae 3-5]
....
....
....


Это первое решение которое пришло в голову. А зачем передавать этот массив из одной активити в другую? Возможно есть более простой способ который вам подойдет. Сделайте наследник класса Application, пропишите его в манифесте. В этом классе сделайте публичное поле которое будет массивом. А в коде любой активити вызывайте метод getApplication(), делайте приведение к %имя_вашего_наследника_Application% и потом просто читаете значение поля являющегося вашим массивом.
1
FRCJocker
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 4
30.12.2013, 12:00  [ТС] #5
Спасибо огромное!
Это решение наверное лучше подойдет.
0
FRCJocker
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 4
02.01.2014, 23:13  [ТС] #6
Попробовал создать класс, который является наследником Application. Но программа перестала запускаться. Новый файл для класса создал в папке /res rightbuttonclick->new->class
сам класс MyApp.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.example.anatomy;
 
import android.app.Application;
 
class MyApp extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            }
        
        public String[][] getChest(){
            return new String[][]{...};
        }
 
                public String[][] getArm(){
            return new String[][]{...};
        }
                ...
}
Прописываю в манифесте
Java
1
2
3
<application
    android:name=".MyApp"
    ...>
Цитата Сообщение от angryrobot Посмотреть сообщение
В этом классе сделайте публичное поле которое будет массивом. А в коде любой активити вызывайте метод getApplication(), делайте приведение к %имя_вашего_наследника_Application% и потом просто читаете значение поля являющегося вашим массивом.
Во второй активити:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class TestActivity extends Activity {
    ListView lvMain;
    Integer state,size;
    MyAp myAp;
    String[][] test1;
    ArrayList<String> alCon = new ArrayList<String>();
    ArrayList<String> alName = new ArrayList<String>();
 
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
switch(getIntent().getExtras().getInt("massive")){
        case 0:
            test1=myAp.getChest();
            break;
        case 1:
            test1=myAp.getArm();
            break;}
        state=getIntent().getExtras().getInt("state");
        for (int i=0;i<test1.length;i++) {
            if(Integer.parseInt(test1[i][2])==state){
            alCon.add(test1[i][3]);
            alName.add(test1[i][2]);
            }
        }
        
        String[] myArray = {};
        myArray = alCon.toArray(new String[alCon.size()]);
        lvMain = (ListView) findViewById(R.id.lvMain);
        lvMain.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_multiple_choice, myArray);
 
        lvMain.setAdapter(adapter);
                }
Вот манифест:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 <application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"> 
        <activity
            android:name="com.example.anatomy.MainAnatomy"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.anatomy.TestActivity"
            android:label="@string/title_activity_test" >
        </activity>
    </application>
Добавлено через 6 минут
Манифест не хочет принимать, т.к. при удалении этой строки программа заработала, но данные не передает в другое активити.
<application
android:name=".MyApp"
...>
0
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
02.01.2014, 23:30 #7
Цитата Сообщение от FRCJocker Посмотреть сообщение
Новый файл для класса создал в папке /res rightbuttonclick->new->class
Нечего ему там делать в папке res. Положите его в ту же папку где лежат файлы активти.

Добавлено через 5 минут
А в строке test1=myAp.getChest(); у вас NullPointerException произойдет. Ибо нужно сначала сделать myAp = (MyApp) getApplication();
0
02.01.2014, 23:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2014, 23:30
Привет! Вот еще темы с ответами:

Как правильно организовать переход с одного активити на другое с паролем - Программирование Android
Как правильно организовать переход с одного активити на другое с паролем (на первом активити вводится пароль и при верном вводе, чтобы...

Можно ли скопировать текст в одном активити, и вставить через буфер обмена в другое? - Программирование Android
как используя буфер обмена (класс clipboard )скопировать текст в одном активити и вставить из буфера обмена в другое?Можно ли так делать...

Передача чисел между активити - Программирование Android
Реакция на нажатие кнопки, переход в другое активити и передача значения переменной GAME_SCORE = 15; Intent intent = new...

Передача данных между Активити - Программирование Android
Все никак не могу разобраться, как передавать данные между активити? я до этого пользовался статическими полями, но это кажется не совсем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru