Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
1

Передача id в другую activity

24.05.2018, 12:15. Просмотров 784. Ответов 23
Метки нет (Все метки)

Подскажите, пожалуйста, как можно решить данную задачу. Имеется 2 активити, в 1-й находится список с названиями продуктов (List View, значения выводятся из mysql из таблицы с полями id_1 и name_1). Необходимо организовать передачу параметра id_1 во 2-ю активность при нажатии на соответствующий list item, то есть чтобы при нажатии на 1-й элемент в списке в id_1 записывалось значение 1, на 2-й - id_1 = 2 и т.д.

Вот что у меня получилось

Фрагмент кода 1-й активити
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
protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if (pDialog.isShowing())
                pDialog.dismiss();
           
            ListAdapter adapter = new SimpleAdapter(
                    Activity1.this, List,
                    R.layout.list_item, new String[]{"id_1","name_1"}, new int[]{R.id.id_1,R.id.name_1});
 
            lv.setAdapter(adapter);
 
           //Открытие активити при нажатии на List item
 
           lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int id_1, long name_1) {
                    Intent intent = new Intent(getApplicationContext(), Activity2.class);
                    intent.putExtra("id_1",id_1);
                    startActivity(intent);
 
                }
            });
 
 
        }
Попытка получения параметра во 2-й активити
Java
1
2
Intent intent=getIntent();
          Integer id_1=intent.getIntExtra("id_1", 1);
Подскажите, пожалуйста, что нужно исправить?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2018, 12:15
Ответы с готовыми решениями:

Передача переменной в другую Activity
package start.project123; import android.app.Activity; import android.content.Intent; import...

Передача cookie в другую Activity
Делаю пост запрос на сервер (авторизация) Сохраняю куки: List&lt;Cookie&gt; CCookies; ........

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

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было...

Android - Передача данных с одного Activity на другое Activity
Здравствуйте , возникла необходимость получения числовых (int и float ну или double) данных в одном...

23
NeeTroo
1 / 1 / 1
Регистрация: 28.06.2017
Сообщений: 9
Завершенные тесты: 1
24.05.2018, 14:20 2
Ну, учитывая, что отсчет обычно начинается с нуля, а не единицы, я внес бы соответствующие изменения в поля id таблиц бд... или сделал что-то вроде этого.
Java
1
intent.putExtra("id_1",id_1+1);
1
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
24.05.2018, 14:50  [ТС] 3
NeeTroo, к сожалению не помогло, параметры всё равно не передаются...
0
Pablito
2812 / 2236 / 754
Регистрация: 12.05.2014
Сообщений: 7,821
Завершенные тесты: 1
24.05.2018, 15:27 4
что значит не передаются?
0
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
24.05.2018, 16:18  [ТС] 5
Pablito, даже если в 1-й активити был выбран 3-й элемент списка, во второй активити значение параметра id_1 =1, а не 3. Подскажите, пожалуйста, как это исправить?
0
Pablito
2812 / 2236 / 754
Регистрация: 12.05.2014
Сообщений: 7,821
Завершенные тесты: 1
24.05.2018, 17:08 6
если вывести в лог значение id_1 внутри onItemClick
что показывает?
1
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
24.05.2018, 17:47  [ТС] 7
Pablito, добавила всплывающие сообщения со значением переменной внутри onItemClick (в 1 активити) и после Integer id_1=intent.getIntExtra("id_1", 1); во 2-й активити. Теперь при нажатии допустим на 2-й элемент списка сначала выводится id_1= 1, а при открытии 2-й активити выводится id_1=2....
0
ILNAR_93
Android
243 / 240 / 52
Регистрация: 19.01.2013
Сообщений: 1,895
Записей в блоге: 3
25.05.2018, 08:06 8
Попробуй ка ты так:

Java
1
getIntent().getExtras().getInt()
1
+1
324 / 157 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
25.05.2018, 09:02 9
Цитата Сообщение от lusenka Посмотреть сообщение
при нажатии допустим на 2-й элемент списка сначала выводится id_1= 1, а при открытии 2-й активити выводится id_1=2....
Дык так и должно быть, id первого элемента 0, второго 1.
Во вторую активити приходит id_1+1, как и просила: intent.putExtra("id_1",id_1+1);

А ещё меня смутило
new int[]{R.id.id_1,R.id.name_1});
long name_1
хотя, может это не в тему.
1
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
05.06.2018, 14:47  [ТС] 10
А подскажите ещё, пожалуйста, каким образом можно передать в другую активность id элемента списка, который берется из БД? Допустим есть таблица с полями id_2, name, в одну активность выводятся строки (содержащие значения name), но id_2 выводятся не по порядку (3,5,1...). Можно ли как-то сделать чтоб теперь при нажатии на 2-й элемент списка в другую активность передавалась не 2, а, в данном примере - 5?
0
+1
324 / 157 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
05.06.2018, 16:08 11
По нажатию на элемент списка ты получаешь номер позиции в списке, соответственно и номер позиции в строковой переменной, получаемой из БД и загруженной в адаптер. Как там у тебя список организован я не знаю.
1
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
08.06.2018, 11:05  [ТС] 12
+1, На данный момент у меня сделано так:
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
@Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    SpisokActivity.this, spisokList,
                    R.layout.list_item_sp, new String[]{"name"}, new int[]{R.id.name});
 
            lv1.setAdapter(adapter);
 
            //Открытие активности при нажатии на List item
 
            lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int id_2, long name) {
                    Intent intent = new Intent(getApplicationContext(), Activity2.class);
                    intent.putExtra("id_2",id_2+1);
                  
                    startActivity(intent);
 
                }
            });
        }
Но передается номер элемента в списке, а не его id, которое берется из БД. Насколько я понимаю проблема где-то здесь???
Java
1
2
3
 public void onItemClick(AdapterView<?> parent, View view, int id_2, long name) {
                    Intent intent = new Intent(getApplicationContext(), Activity2.class);
                    intent.putExtra("id_2",id_2+1);
0
+1
324 / 157 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
08.06.2018, 11:57 13
Строковая переменная у тебя spisokList. Вот оттуда и бери значение. Типа того,
Java
1
intent.putExtra("id_2",spisokList[0][id_2+1]);
1
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
08.06.2018, 12:19  [ТС] 14
+1, Почему-то выдает предупреждение "Array type expected; found: 'java.util.ArrayList<java.....".
Вот полный листинг 1-й активности.
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package com.example.user.test_1;
 
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import java.util.ArrayList;
import java.util.HashMap;
 
public class SpisokActivity extends AppCompatActivity {
 
    private String TAG = SpisokActivity.class.getSimpleName();
 
    private ProgressDialog pDialog;
    private ListView lv1;
    ArrayList<HashMap<String, String>> spisokList;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.spisok);
 
        spisokList = new ArrayList<>();
 
        lv1 = findViewById(R.id.list_sp);
 
        new GetSpisok().execute();
    }
 
  
    private class GetSpisok extends AsyncTask<Void, Void, Void> {
 
        private  String url = "http://example.com/spisok.php";
 
        @Override
        protected void onPreExecute() {
 
           
            super.onPreExecute();
            // Showing progress dialog
            pDialog = new ProgressDialog(SpisokActivity.this);
            pDialog.setMessage("Download...");
            pDialog.setCancelable(false);
            pDialog.show();
 
        }
 
        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();
            String jsonStr = sh.makeServiceCall(url);
            Log.e(TAG, "Response from url: " + jsonStr);
 
            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);
 
                    // Getting JSON Array node
                    JSONArray table_data = jsonObj.getJSONArray("table_data");
 
 
                    for (int i = 0; i < table_data.length(); i++) {
                        JSONObject c = table_data.getJSONObject(i);
 
                        String name = c.getString("name");
                      
                        // tmp hash map for single spisok_main
                        HashMap<String, String> spisok_main = new HashMap<>();
 
                        // adding each child node to HashMap key => value
                        
                        spisok_main.put("name", name);
                        spisokList.add(spisok_main);
                    }
                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG)
                                    .show();
                        }
                    });
 
                }
            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });
 
            }
 
            return null;
        }
 
       @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (pDialog.isShowing())
                pDialog.dismiss();
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(
                    SpisokActivity.this, spisokList,
                    R.layout.list_item_sp, new String[]{"name"}, new int[]{R.id.name});
 
            lv1.setAdapter(adapter);
 
            lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int id_2, long name) {
                    Intent intent = new Intent(getApplicationContext(), Activity2.class);
                    
                  intent.putExtra("id_2",spisokList[0][id_2+1]);
 
                    startActivity(intent);
 
                }
            });
        }
 
 }}
0
petruchodd
08.06.2018, 15:09
  #15

Не по теме:

я хренею просто. Как вы обучаетесь ? Человек умеет работать с Mysql , но не умеет передавать данные между активити

0
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
14.06.2018, 08:29  [ТС] 16
Так тоже не работает
Java
1
2
3
4
5
6
7
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent intent = new Intent(getApplicationContext(), Activity2.class);
                    Integer id_2 = (int) id;
                    intent.putExtra("id_2",id_2);
                     startActivity(intent);
 
                }
0
Pablito
2812 / 2236 / 754
Регистрация: 12.05.2014
Сообщений: 7,821
Завершенные тесты: 1
14.06.2018, 10:16 17
что значит "не работает" надо догадаться?
0
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
14.06.2018, 18:41  [ТС] 18
Pablito, это значит, что во вторую активность почему-то передается порядковый номер элемента в списке, а не id из базы.
0
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
14.06.2018, 19:42 19
Цитата Сообщение от lusenka Посмотреть сообщение
Integer id_2 = (int) id;
почему вы думаете что id_2 это id из базы данных? Что такое long id ? В документации посмотрите.
Кликните здесь для просмотра всего текста
Даже если не посмотрели, вот вам ответ: нужно из адаптера по position брать элемент, у него брать ваш id из базы и делать уже что вам вздумается


Добавлено через 2 минуты
ну или использовать свой адаптер, который будет из метода getItemId(int position) его id из базы.
1
lusenka
0 / 0 / 0
Регистрация: 18.05.2018
Сообщений: 15
15.06.2018, 08:20  [ТС] 20
demixdn, в этом-то и проблема, я не соображаю как взять у элемента этот id из базы
0
15.06.2018, 08:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2018, 08:20

Передача строки из activity в класс non activity !
Здравствуйте дамы и господа. Очень нужна помощь. public class Login_ac extends AppCompatActivity...

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

Не могу передать данные в другую Activity
В первой Activity: String table_exam = &quot;position as PS &quot; + &quot;inner join set_exam as SE on PS.id...


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

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

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