Есть разные способы обмена данными между действиями
1: Передача данных между действиями с использованием Intent
Intent intent=new Intent(this, desirableActivity.class);
intent.putExtra("KEY", "Value");
startActivity(intent)
2: Использование статического ключевого слова, определение переменной как public static и использование любой, где в проекте
public static int sInitialValue=0;
используется в любом месте проекта, используя classname.variableName;
3: используя Database
, но его бит длительный процесс, вы должны используйте запрос для вставки данных и итерации данных с помощью курсора, когда это необходимо. Но нет возможности потерять данные без очистки кеша.
4: Использование общих настроек
намного проще, чем база данных. но есть какое-то ограничение, вы не можете сохранить объекты ArrayList, List и custome.
5: Создать геттер-сеттер в классе Aplication и получить доступ к любому где в проекте.
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
здесь установлено и получить от действий
((YourApplicationClass)getApplicationContext()).setData("abc");
String data=((YourApplicationClass)getApplicationContext()).getData();
Если вы ссылаетесь на рамки Cocoa или Foundation, вы можете использовать object-c в своем C-коде. Однако, если вы хотите использовать стандартный синтаксис обмена сообщениями, вам придется изменить расширение файла с .c на .m, чтобы оно было скомпилировано как объектное c. Если вы сохраните расширение .c, вы сможете использовать вызовы времени выполнения c-стиля для взаимодействия с объектами-объектами (например, objc_msgSend
, objc_getClass
и т. Д.).
Примеры: Внутри файла .m
void cFunction() {
[[NSString alloc] init];
}
Внутри файла .c
void cFunction() {
void* cls = objc_getClass("NSString");
void* obj = objc_msgSend(cls, NSSelectorFromString(CFSTR("alloc")));
obj = objc_msgSend(obj, NSSelectorFromString(CFSTR("init")));
}
Если вы выберете второй метод, обратитесь к Ссылка времени выполнения Objective-C .
Objective-C - очень тонкая оболочка поверх C. Компилятор просто переводит
[obj message:argument];
в C-вызов
obj_msgSend(obj,@selector(message:),argument);
, и это он (где @selector(message:)
- это волшебное кодирование, превращающее селектор (имя метода) в понятное для компьютера.)
Таким образом, с Objective-C и C с точки зрения компилятора нет большой разницы. Например, вы можете скомпилировать чистую программу C с компилятором Objective-C с точно таким же результатом, как и при компиляции с компилятором C.
Итак, самый простой способ «смешать» бит Objective-C с C - использовать расширение .m
, чтобы компилятор использовал Objective-C.
Это не делает вашу программу внезапно очень Objective-C-y. Вы можете сохранить свою программу почти чистой C, с расширением .m
. С помощью .m
вы можете добавить несколько строк сообщений Objective-C без проблем.
objc_msgSend
as-is - это неправильная вещь. Вы должны применить его к соответствующему типу функции:typedef CFStringRef (*StringWithStringIMP)(id, SEL, CFStringRef); CFStringRef string = ((StringWithStringIMP)objc_msgSend)(objc_getClass("NSString"), sel_getUid("foo"), CFSTR("This is pointless."));
– Jens Ayton 5 May 2011 в 18:42-Xlinker -framework -Xlinker Foundation
для этого. Вы должны сделать#include <Foundation/NSObjcRuntime.h>
, чтобы получить текущий заголовок времени выполнения. – ughoavgfhw 5 May 2011 в 19:06objc_msgSend
из файла.c
. Просто используйте.m
. Вы можете скомпилировать файл.m
без XCode, используяgcc foo.m -o foo.o -framework Foundation -framework Cocoa
и т. Д. – Yuji 6 May 2011 в 00:21