嘿,我是制作Android应用程序的新手,我明白在两个活动之间传递数据的最简单方法是通过意图。
在我的一个类(EventOptions.java)中,我调用了这行代码:
Intent i = new Intent(EventOptions.this, PhotoFetcher.class);
i.putExtra("imageArray", imageIDs);
startActivity(i);
imageIDs是一个字符串数组
在我的PhotoFetcher类中,我想将一个名为imageIDs的字符串数组设置为我通过intent传递的imageIDs字符串数组。
我想在我的班级中将图像设置为全局变量:
public class MainActivity extends Activity implements View.OnClickListener{
Intent it = getIntent();
String[] imageIDs = it.getStringArrayExtra("imageArray");
...
}
然而,这会崩溃我的应用程序。这是不允许的?如果是这样,我该如何解决?提前致谢!
答案 0 :(得分:1)
需要在方法中而不是在类级别调用getIntent()
。在onCreate
内调用它:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// get Intent here
Intent it = getIntent();
String[] imageIDs = it.getStringArrayExtra("imageArray");
}
如果我想在另一个定义的公共类中使用imageIDs数组 在我的PhotoFetcher课程中,我是否需要再次调用它?
要在imageIDs
类中获取PhotoFetcher
,请将String [] imageIDs
声明为全局变量,或使用imageIDs
类构造函数传递PhotoFetcher
答案 1 :(得分:0)
您必须使用putStringArrayListExtra
。您可以先将String []转换为ArrayList。
喜欢这样
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(imageIDs));
Intent i = new Intent(EventOptions.this, PhotoFetcher.class);
i.putStringArrayListExtra("imageArray", arrayList);
startActivity(i);
然后你可以像你一样获取它,最好是在onCreate
或之后。
Intent it = getIntent();
ArrayList<String> imageIDs = it.getStringArrayListExtra("imageArray");
答案 2 :(得分:0)
在不保留磁盘的情况下共享数据
通过将活动保存在内存中,可以在活动之间共享数据,因为在大多数情况下,两个活动都在同一个流程中运行。
注意:有时,当用户离开您的活动时(不退出),Android可能决定终止您的应用程序。在这种情况下,我遇到了一些情况,其中android尝试使用在应用程序被杀之前提供的意图启动最后一个活动。在这种情况下,存储在单件(您的或应用程序)中的数据将消失,并且可能发生不良事件。为了避免这种情况,您可以将对象保存到磁盘或检查数据,然后再使用它来确保数据有效。
使用单件类
有一个整数数据的课程:
public class DataHolder {
private String data;
public String getData() {return data;}
public void setData(String data) {this.data = data;}
private static final DataHolder holder = new DataHolder();
public static DataHolder getInstance() {return holder;}
}
From the launched activity:
String data = DataHolder.getInstance().getData();
使用应用程序单例(我建议这样做)
应用程序单例是android.app.Application的一个实例,它是在启动应用程序时创建的。您可以通过扩展应用程序来提供自定义:
import android.app.Application;
public class MyApplication extends Application {
private String data;
public String getData() {return data;}
public void setData(String data) {this.data = data;}
}
在启动活动之前:
MyApplication app = (MyApplication) getApplicationContext();
app.setData(someData);
然后,从已启动的活动开始:
MyApplication app = (MyApplication) getApplicationContext();
String data = app.getData();
答案 3 :(得分:0)
试试这个:
public class MainActivity extends Activity implements View.OnClickListener {
//global variable
String[] imageIDs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get Intent here
Intent it = getIntent();
imageIDs = it.getStringArrayExtra("imageArray");
}
}