有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android应用程序中在活动之间传递数据的java

嘿,我对安卓应用程序的开发还很陌生,我知道在两个活动之间传递数据最简单的方法是通过意图

在我的一个类(EventOptions.java)中,我将这行代码称为:

Intent i = new Intent(EventOptions.this, PhotoFetcher.class);
i.putExtra("imageArray", imageIDs); 
startActivity(i);

ImageID是一个字符串数组

在我的PhotoFetcher类中,我想将一个名为ImageID的字符串数组设置为我正在传递的ImageID字符串数组

我想在我的类中将图像设置为全局变量:

public class MainActivity extends Activity implements View.OnClickListener{

    Intent it = getIntent();
    String[] imageIDs = it.getStringArrayExtra("imageArray");
    ...
}

但这会使我的应用程序崩溃。这是不允许的吗?如果是的话,我该如何修复它?提前谢谢


共 (3) 个答案

  1. # 1 楼答案

    ρѕρєєK一针见血,你正在运行一种方法,构造函数和字段都在其中。要使变量(ImageID)全局化,非常简单,有几种方法。在任何方法之外声明它们,然后在onCreate或onResume(将始终被调用)中分配它们

    试试这个:

    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");
        }
    
    }
    
  2. # 2 楼答案

    在不保存到磁盘的情况下共享数据

    考虑到在大多数情况下,两个活动都在同一进程中运行,通过将数据保存在内存中,可以在活动之间共享数据

    注意:有时,当用户离开你的活动时(没有退出),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();
    

    使用应用程序单例(我建议这样做)

    应用程序singleton是android的一个实例。应用程序。应用程序启动时创建的应用程序。您可以通过扩展应用程序来提供自定义应用程序:

    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. # 3 楼答案

    你必须使用putStringArrayListExtra。可以先将字符串[]转换为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");