从另一个类访问数组值

时间:2018-04-20 09:58:41

标签: java android arrays

我希望以下内容有道理......

我有A级,它执行以下操作:

  

A类

public class a extends fragment {

    private List<AllUserAdoptIdsData> dataListAdoptIds;

        public View onCreateView(.... {

          dataListAdoptIds = new ArrayList<>();

          populateAdoptIdsData("a");
       }

public void populateAdoptIdsData(final String email) {

    dataListAdoptIds.clear();

    AsyncTask<Object,Void,Void> task = new AsyncTask<Object, Void, Void>() {

        @Override
        protected Void doInBackground(Object... params) {

            String email = (String)params[0];

            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url("http://localhost/app_scripts/getUserAdoptPostIds2.php?email="+email )
                    .build();
            try {
                Response response = client.newCall(request).execute();

                JSONArray array = new JSONArray(response.body().string());

                for (int i=0; i<array.length(); i++){

                    JSONObject object = array.getJSONObject(i);

                    AllUserAdoptIdsData data = new AllUserAdoptIdsData(
                            object.getInt("ADOPT_ID")
                    );
                    dataListAdoptIds.add(data);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                System.out.println("End of content"+e);
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            adapter.notifyDataSetChanged();
        }
    };
    task.execute(email);
  }
}
  

AllUserAdoptIdsData

package com.example.admin.paws;

import android.util.Log;

import java.util.ArrayList;
import java.util.List;

public class AllUserAdoptIdsData {
    public int adopt_id;
    private List<Integer> list;

    public AllUserAdoptIdsData(int adopt_id)
    {
     list = new ArrayList<Integer>();
     list.add(adopt_id);
     this.adopt_id = adopt_id;

        Log.d("LOG", "AllUserAdoptIdsData: "+list.size());
    }

    public int getId() {
        return adopt_id;
    }

    public List<Integer> getList() {
        return list;
    }

}

现在我有了B类,我希望在A类中添加到AllUserAdoptIdsData的值。正如您所看到的,我尝试按照此链接(Java - How to access an ArrayList of another class?),但显然每次都 启动AllUserAdoptIdsData,它会创建一个新数组。不知道我哪里出错了。

  

B类

public class B extends Fragment {

   public View onCreateView(....{

   //Here I'm trying to see if the list contains a specific value.

        AllUserAdoptIdsData allUserAdoptIdsData;
        allUserAdoptIdsData = new AllUserAdoptIdsData(0);

        List<Integer> list = allUserAdoptIdsData.getList();
        Log.d("LOG", "lookupAdoptId: "+list.contains(209));
   }

2 个答案:

答案 0 :(得分:0)

  

...但显然每次启动AllUserAdoptIdsData时都会创建一个新数组。

那是因为你每次打电话时都会实例化

AllUserAdoptIdsData allUserAdoptIdsData;
allUserAdoptIdsData = new AllUserAdoptIdsData(0);

要从不同的类(尤其是不同的Fragments)访问数组(列表)的内容,您需要考虑在不同的Activities/Fragments之间提供此数据的方法(请参阅此{{3 }})。

也不要混淆Array和(Array)List!

答案 1 :(得分:0)

看到你使用Model类创建了一个自定义列表。请理解以下几点

  • 在java构造函数中用于初始化对象 - 您每次都通过Model类的构造函数将int值初始化为0
  • 有一个对象的访问说明符,用于定义特定对象的可访问性 - 您要访问从片段a到片段b的列表数据,因此您需要声明公共访问说明符以列出。 / LI>
  • 一旦你将任何对象初始化为特定值,那么先前初始化的值将被覆盖 - 在你的片段中 b你正在将对象初始化为每个初始化时带有一些值的新对象