Страница 1 из 1
Как организовать общие переменные и функции?
Добавлено: 14 янв 2012, 06:49
Oleg_SS
Создаю отдельный класс в отдельном файле и не могу обратиться к ресурсам.
Код: Выделить всё
package my.namespace;
import android.content.res.Resources;
public class MyCommon {
String name_File_Ini; // Имя файла настроек
Resources myResources_Ini;
public String getNameIniFile() {
myResources_Ini = getResources(); // !!!!! Ругается The method getResources() is undefined for the type AutoSMSCommon
name_File_Ini = "/Android/data/" + // Общий каталог программ
myResources_Ini.getString(R.string.app_name) + "/" + // Каталог для Auto SMS
myResources_Ini.getString(R.string.app_name) + ".ini"; // Имя файла
return name_File_Ini;
}
}
и еще если я создам в активити переменную, которая бутет ссылаться на MyCommon, то как мне сослаться на эту переменную из другой активити?
Ведь насколько я понимаю, если я скажу new в каждом активити, то это будут разные переменные, указывающие на MyCommon. А мне надо в одной активити создать переменную, а в другой прочитать ее значение.
Варианты с передачей данных между активностями уже рассматривал. Дело в том, что мне надо передавать сложные массивы, а передача данных между активностями работает, если данные простые.
Тип передаваемых мной переменных выглядит так:
Hashtable<String, Hashtable<String, String>>
Re: Как организовать общие переменные и функции?
Добавлено: 14 янв 2012, 18:35
damager82
Oleg_SS писал(а):Создаю отдельный класс в отдельном файле и не могу обратиться к ресурсам.
getResources не срабатывает, потому что нужен Context. Activity его наследует, поэтому умеет ресурсы юзать. Как вариант, создайте конструктор с параметром Сontext и при создании объекта в Activity, передавайте туда
this.
А вообще Intent позволяет как-то передавать сложные объекты, но я еще не разбирался с этим.
public Intent putExtra (String name, Serializable value)
Может кто знает?
А мне надо в одной активити создать переменную, а в другой прочитать ее значение.
Используйте static объекты. Они всегда в одном экземпляре.
http://docs.oracle.com/javase/tutorial/ ... svars.html
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 12:24
mdzht
Привет коллеги! Не могу сообразить, уже месяц бьюсь головой об стену. Необходимо передать ключи по нажатию кнопки.
В первом классе MainActivity.java
Код: Выделить всё
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
Intent i = new Intent(MainActivity.this,NextActivity.class);
i.putExtra("name", txtNameId.getText().toString());
i.putExtra("link_image",txtLinkImage.getText().toString());
startActivity(i);
break;
}
}
NextActivity.java
Код: Выделить всё
public String TAG_NAME_ID; // Если тут же приписывать то все работает отлично, но у меня в MainActivty не один button, а несколько
public String TAG_LINK_IMAGE; // public static final String TAG_NAME_ID="name"; = works!
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_myapp);
Intent i = getIntent();
TAG_NAME_ID = i.getStringExtra("name");
TAG_LINK_IMAGE = i.getStringExtra("link_image");
.......
}
......
protected String doInBackground(String... args) {
...
String txt_name = c.getString(TAG_NAME_ID);
String rus_detail_text_image_k = c.getString(TAG_LINK_IMAGE);
}
в адаптере ListAdapter.java
Код: Выделить всё
public ImageLoader imageLoader;
......
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (convertView == null)
v = inflater.inflate(R.layout.item_list, null);
TextView name = (TextView) v.findViewById(R.id.name);
TextView link_image = (TextView) v.findViewById(R.id.link_image);
ImageView iv = (ImageView) v.findViewById(R.id.image);
HashMap<String, String> list = new HashMap<String, String>();
list = data.get(position);
name.setText(list.get(NextKitchenActivity.TAG_NAME_ID));
link_image.setText(list.get(NextKitchenActivity.TAG_LINK_IMAGE));
imageLoader.ShowImage(list.get(NextActivity.TAG_LINK_IMAGE),iv);
return v;
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 12:34
altwin
mdzht писал(а):Привет коллеги! Не могу сообразить, уже месяц бьюсь головой об стену. Необходимо передать ключи по нажатию кнопки.
В первом классе MainActivity.java
Код: Выделить всё
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn:
Intent i = new Intent(MainActivity.this,
NextActivity.class);
i.putExtra("name", txtNameId.getText().toString());
i.putExtra("link_image",
txtLinkImage.getText().toString());
startActivity(i);
break;
}
}
NextActivity.java
Код: Выделить всё
public String TAG_NAME_ID; // Если тут же приписывать то все работает отлично, но у меня в MainActivty не один button, а несколько
public String TAG_LINK_IMAGE; // public static final String TAG_NAME_ID="name";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_myapp);
Intent i = getIntent();
TAG_NAME_ID = i.getStringExtra("name");
TAG_LINK_IMAGE = i.getStringExtra("link_image");
.......
}
......
protected String doInBackground(String... args) {
...
String txt_name = c.getString(TAG_NAME_ID);
String rus_detail_text_image_k = c.getString(TAG_LINK_IMAGE);
}
в адаптере ListAdapter.java
Код: Выделить всё
public ImageLoader imageLoader;
......
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (convertView == null)
v = inflater.inflate(R.layout.item_list, null);
TextView name = (TextView) v.findViewById(R.id.name);
TextView link_image = (TextView) v.findViewById(R.id.link_image);
ImageView iv = (ImageView) v.findViewById(R.id.image);
HashMap<String, String> list = new HashMap<String, String>();
list = data.get(position);
name.setText(list.get(NextKitchenActivity.TAG_NAME_ID));
link_image.setText(list.get(NextKitchenActivity.TAG_LINK_IMAGE));
imageLoader.ShowImage(list.get(NextActivity.TAG_LINK_IMAGE),iv);
return v;
если честно вопроса не понял, и читать не форматированный код не удобно. Если хотите присвоить значение в зависимости от нажатой кнопки, используйте switch(v.getId) и по id кнопки выполняйте присваивание строке. Если нужно передать в другую activity значения используйте сериализацию.
P.S. с форматированный кодом проще.

Когда вы создаете intent вам нужно вызвать его метод putExtra, и передать туда сериализованный объект. Сутя по списку уроков - тут это описанно:
http://startandroid.ru/ru/uroki/vse-uro ... hju-intent
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 12:52
mdzht
Ну я так и делаю, i.putExtra("name", txtNameId.getText().toString()); и хочу получить TAG_NAME_ID = i.getStringExtra("name"); а получаю хрень
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 13:02
altwin
mdzht писал(а):Ну я так и делаю, i.putExtra("name", txtNameId.getText().toString()); и хочу получить TAG_NAME_ID = i.getStringExtra("name"); а получаю хрень
а если вместо getStringExtra()? использовать getString()? Хотя должно работать итак, вопрос в том, хрень , которую вы получаете - это что?
по сути должно работать:
[syntax=java5]
Intent intent= getIntent();
String receiver;
if(intent.hasExtra("name")){
receiver = intent.getStringExtra("name");
}
[/syntax]
если же туда пришло что то не то, то соответственно что то не то туда было положенно.
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 14:37
mdzht
Да вы были правы, неправильно делал. Я делаю так
MainActivity.java
Код: Выделить всё
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
Intent i = new Intent(MainActivity.this,
NextActivity.class);
i.putExtra("name1",TAG_TEXT_NAME_1);
i.putExtra("image1",TAG_LINK_IMAGE_1);
startActivity(i);
break;
case R.id.btn2n:
Intent i = new Intent(MainActivity.this,
NextActivity.class);
i.putExtra("name2", TAG_TEXT_NAME_2);
i.putExtra("image2",TAG_LINK_IMAGE_2);
startActivity(i);
break;
case R.id.btn3:
Intent i = new Intent(MainActivity.this,
NextActivity.class);
i.putExtra("name3", TAG_TEXT_NAME_3);
i.putExtra("image3",TAG_LINK_IMAGE_3);
startActivity(i);
break;
NextActivity.java
Код: Выделить всё
if(i.hasExtra("name1") && i.hasExtra("image1")){
TAG_NAME_ID = i.getStringExtra("name1");
TAG_LINK_IMAGE = i.getStringExtra("image1");
}
else if (i.hasExtra("name2") && i.hasExtra("image2")){
TAG_NAME_ID = i.getStringExtra("name2");
TAG_LINK_IMAGE = i.getStringExtra("image2");
}
else if (i.hasExtra("name3") && i.hasExtra("image3")){
TAG_NAME_ID = i.getStringExtra("name3");
TAG_LINK_IMAGE = i.getStringExtra("image3");
}
но только первая кнопка работает, остальные грузят пустые страницы
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 15:14
altwin
mdzht писал(а):Да вы были правы, неправильно делал. Я делаю так
MainActivity.java
Код: Выделить всё
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
Intent i = new Intent(MainActivity.this,
NextActivity.class);
i.putExtra("name1",TAG_TEXT_NAME_1);
i.putExtra("image1",TAG_LINK_IMAGE_1);
startActivity(i);
break;
case R.id.btn2n:
Intent i = new Intent(MainActivity.this,
NextActivity.class);
i.putExtra("name2", TAG_TEXT_NAME_2);
i.putExtra("image2",TAG_LINK_IMAGE_2);
startActivity(i);
break;
case R.id.btn3:
Intent i = new Intent(MainActivity.this,
NextActivity.class);
i.putExtra("name3", TAG_TEXT_NAME_3);
i.putExtra("image3",TAG_LINK_IMAGE_3);
startActivity(i);
break;
NextActivity.java
Код: Выделить всё
if(i.hasExtra("name1") && i.hasExtra("image1")){
TAG_NAME_ID = i.getStringExtra("name1");
TAG_LINK_IMAGE = i.getStringExtra("image1");
}
else if (i.hasExtra("name2") && i.hasExtra("image2")){
TAG_NAME_ID = i.getStringExtra("name2");
TAG_LINK_IMAGE = i.getStringExtra("image2");
}
else if (i.hasExtra("name3") && i.hasExtra("image3")){
TAG_NAME_ID = i.getStringExtra("name3");
TAG_LINK_IMAGE = i.getStringExtra("image3");
}
но только первая кнопка работает, остальные грузят пустые страницы
Если одна работает, то в остальных нужно просто сделать все также. Возможно там не указан listener, т.е. события нажатия обрабатываются, но сам обработчик к кнопкам не привязан.
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 15:20
mdzht
Но в чем прикол ребята, если в NextActivity.java оставить только первый if т.е
Код: Выделить всё
if(i.hasExtra("name1") && i.hasExtra("image1")){
TAG_NAME_ID = i.getStringExtra("name1");
TAG_LINK_IMAGE = i.getStringExtra("image1");
}
все кнопки работают и все они работают как должна работать первая кнопка. Не могу понять почему остальные кнопки работают хотя в них вставлю
Код: Выделить всё
i.putExtra("name2", TAG_TEXT_NAME_2);
i.putExtra("name3", TAG_TEXT_NAME_3);
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 15:33
altwin
mdzht писал(а):Но в чем прикол ребята, если в NextActivity.java оставить только первый if т.е
Код: Выделить всё
if(i.hasExtra("name1") && i.hasExtra("image1")){
TAG_NAME_ID = i.getStringExtra("name1");
TAG_LINK_IMAGE = i.getStringExtra("image1");
}
все кнопки работают и все они работают как должна работать первая кнопка. Не могу понять почему остальные кнопки работают хотя в них вставлю
Код: Выделить всё
i.putExtra("name2", TAG_TEXT_NAME_2);
i.putExtra("name3", TAG_TEXT_NAME_3);
Когда выполняется условие case: id.btn, для какой то кнопки, выполняется его код, в котором вы и передаете значение из editText в extra. То какой кнопкой вы запускаете intent не имеет значение если содержимое editText не меняется. Значение которое вы получаете в точности соответствует тому, которое вы передаете, если приходит одно и то же, то вы передаете во всех случаях одно и то же.
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 15:44
mdzht
Но я не из editText а передаю значение. Я передаю case btn1: public static final TAG_TEXT_NAME_1 = "name1"; case btn2: public static final TAG_TEXT_NAME_2 = "name2"; и так далее, listener для них всех один. ListAdapter тоже, приложение работала бы если бы я создал для них каждого отдельные Activity, отдельный ListAdapter отдельные layout.xml но это уж очень не красиво. Если бы я мог передать по нажатию кнопки начения для следующего activity static final теги для массива php $row = mysql_fetch_array($result), то все бы работала отлично. Думаю этот код
Код: Выделить всё
if(i.hasExtra("rname") || i.hasExtra("rimage")){
TAG_TEXT_NAME = i.getStringExtra("rname");
TAG_LINK_IMAGE_KITCHEN = i.getStringExtra("rimage");
}
else if (i.hasExtra("iname") || i.hasExtra("iimage")){
TAG_TEXT_NAME = i.getStringExtra("iname");
TAG_LINK_IMAGE_KITCHEN = i.getStringExtra("iimage");
}
else if (i.hasExtra("gname") || i.hasExtra("gimage")){
TAG_TEXT_NAME = i.getStringExtra("gname");
TAG_LINK_IMAGE_KITCHEN = i.getStringExtra("gimage");
}
не так работает как я хотел
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 15:59
altwin
mdzht писал(а):не так работает как я хотел
Чтобы контролировать то, как оно работает, вам нужно к примеру создать класс:
class Names implements serializable и переопределить конструктор и toString, как и любой другой метод, и получать вы будете то, что возвращается при десериализации. Вы просто создаете объекты этого класса, в которых хранятся нужные вам имена и полностью контролируете процесс.
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 16:03
mdzht
altwin Большая человеческая благодарность вам, вы были правы, все работает отлично. Просто для других кнопок я неправильные значения передавал, т.е ошибки были в значениях а ни в
Код: Выделить всё
if(i.hasExtra("rname") || i.hasExtra("rimage")){
TAG_TEXT_NAME = i.getStringExtra("rname");
TAG_LINK_IMAGE_KITCHEN = i.getStringExtra("rimage");
}
else if (i.hasExtra("iname") || i.hasExtra("iimage")){
TAG_TEXT_NAME = i.getStringExtra("iname");
TAG_LINK_IMAGE_KITCHEN = i.getStringExtra("iimage");
}
else if (i.hasExtra("gname") || i.hasExtra("gimage")){
TAG_TEXT_NAME = i.getStringExtra("gname");
TAG_LINK_IMAGE_KITCHEN = i.getStringExtra("gimage");
}
Re: Как организовать общие переменные и функции?
Добавлено: 26 янв 2014, 16:11
altwin
mdzht писал(а):altwin Большая человеческая благодарность вам, вы были правы, все работает отлично. Просто для других кнопок я неправильные значения передавал, т.е ошибки были а значениях а ни в
Код: Выделить всё
if(i.hasExtra("rname") || i.hasExtra("rimage")){
TAG_TEXT_NAME = i.getStringExtra("rname");
TAG_LINK_IMAGE_KITCHEN = i.getStringExtra("rimage");
}
else if (i.hasExtra("iname") || i.hasExtra("iimage")){
TAG_TEXT_NAME = i.getStringExtra("iname");
TAG_LINK_IMAGE_KITCHEN = i.getStringExtra("iimage");
}
else if (i.hasExtra("gname") || i.hasExtra("gimage")){
TAG_TEXT_NAME = i.getStringExtra("gname");
TAG_LINK_IMAGE_KITCHEN = i.getStringExtra("gimage");
}
так бывает часто, потому, лучше просто не торопиться и быть внимательнее. Ответ выше я изменил, чтобы было понятно, что можно передавать объект в котором полностью контролировать процесс, не надеясь на поведение по умолчанию.