【问题标题】:How to retrieve data from Model class in another activity? [duplicate]如何从另一个活动中的模型类中检索数据? [复制]
【发布时间】:2018-01-27 08:59:34
【问题描述】:

这是我的 JSON 响应,我将该响应存储到模型类中

 JsonObjectRequest jsonbObjReq_parents_Child = new JsonObjectRequest(Request.Method.GET, "http://qnabubackend-env.2fuz4eh5jh.ap-south-1.elasticbeanstalk.com/parent/api/get/childs/"+user_id, null,
            new Response.Listener<JSONObject>()
            {
                @Override
                public void onResponse(JSONObject response)
                {
                    try
                    {
                        Boolean error = response.getBoolean("error");
                        JSONArray jsonArray = response.getJSONArray("response");
                        int size = jsonArray.length();
                        Log.e("HEy>>>>",""+size);
                        for (int i=0;i<jsonArray.length();i++)
                        {
                            Log.e("H>>>>",""+size);
                            JSONObject jsonObject = jsonArray.getJSONObject(i);
                            DataSet dataSet = new DataSet();
                            dataSet.setStudentId(jsonObject.getInt("id"));
                            dataSet.setStudentFirstName(jsonObject.getString("studentFirstName"));
                            dataSet.setStudentLastName(jsonObject.getString("studentLastName"));
                            dataSet.setStudentclassId(jsonObject.getInt("classId"));
                            dataSet.setStudentCurClass(jsonObject.getInt("currentClass"));
                            dataSet.setStudentCurClassSec(jsonObject.getString("currentClassSection"));
                            dataSet.setStudentMobileNum(jsonObject.getLong("phoneNumber"));
                            dataSet.setStudentSchoolId(jsonObject.getInt("schoolId"));
                            dataSet.setSessionYear(jsonObject.getString("sessionYear"));

                            JSONArray jsonArray1 = jsonObject.getJSONArray("subjects");

                            List<DataSet.SubjectsList> subjectsLists = new ArrayList<>();

                            int j;

                            for (j=0;j<jsonArray1.length();j++)
                            {
                                JSONObject jsonObject1 = jsonArray1.getJSONObject(j);
                                DataSet.SubjectsList dataSubjects = new DataSet.SubjectsList();
                                dataSubjects.setSubjectId(jsonObject1.getInt("id"));
                                dataSubjects.setSubjectsName(jsonObject1.getString("name"));
                                subjectsLists.add(dataSubjects);

                            }

                            dataSet.setSubjectsLists(subjectsLists);

                            childData.add(dataSet);

                        }

childData 是我的通用数组列表,即:DataSet。
现在我想在另一个活动中访问像 schoolId,sessionYear 这样的数据。

public class AnnualActivity {

JsonObjectRequest jsonbObjReq_parents_Child = new JsonObjectRequest(Request.Method.GET, "http://qnabubackend-env.2fuz4eh5jh.ap-south-1.elasticbeanstalk.com/school/api/annual/activity/get/list?schoolId="+schoolID+"&session="+sessionYear, null,

}  

这不是下一个活动,所以我不能使用意图概念。

如果我这样做,我会在 AnnualActivity 类中得到 NullPointerException

 private List sharedPref(List<DataSet> data)
    {

        for (int i=0;i<data.size();i++)
        {
            DataSet dataSet = data.get(i);
            int a = dataSet.getStudentSchoolId();
            String b = dataSet.getSessionYear();

            Log.e("grrf",""+a);
            Log.e("fasfc",b);
        }

        return data;
    }

【问题讨论】:

  • 你想从哪个类调用上面的 url
  • 年度活动课程。我想从模型类中获取数据要访问这里本身以及我需要在 URL 中传递的数据
  • 为什么你不能使用 intent.putExtra ?并在 AnnulActivity 类中处理数据
  • 你能从你要调用的类中访问 c​​hildData 数组列表
  • 在我得到响应的活动和我想在 URL 中传递参数的活动之间,我有另一个活动。

标签: java android arraylist nullpointerexception


【解决方案1】:

您可以将该 ArrayList 存储在 sharedPreference 中,例如

  SharedPreferences preferences = Utils.getGCMPreferences(context);
     SharedPreferences.Editor editor = preferences.edit();
      editor.putString("key", new Gson().toJson(list));
       editor.commit();

list 是您的模型类类型

无论你想在哪里使用它,你都可以得到喜欢

ModelClass model = null;
   SharedPreferences preferences = getGCMPreferences(context);
   String data = preferences.getString("key", null);

   model = new Gson().fromJson(data,ModelClass.class);

【讨论】:

  • 我可以只使用共享首选项,而不是 Gson。如果是怎么办?
  • @Sri Sharedpreferences 用于存储 JSON 字符串。它不能存储列表对象
  • 虽然 getGCMPreferences 不是你获取它们的方式
  • 你可以试试这个link
【解决方案2】:

创建方法

private List sharedPref(List<DataSet> data)
{

    for (int i=0;i<data.size();i++)
    {
        DataSet dataSet = data.get(i);
        int a = dataSet.getStudentSchoolId();
        String b = dataSet.getSessionYear();
        getJsonRequest(a+"" , b);
        Log.e("grrf",""+a);
        Log.e("fasfc",b);
    }

    return data;
}

 public void getJsonRequest(String schoolID, String sessionYear){
    JsonObjectRequest jsonbObjReq_parents_Child = new JsonObjectRequest(Request.Method.GET, "http://qnabubackend-env.2fuz4eh5jh.ap-south-1.elasticbeanstalk.com/school/api/annual/activity/get/list?schoolId="+schoolID+"&session="+sessionYear, null);

}

从循环中调用此方法并返回循环。

【讨论】:

  • 这不是活动兄弟,它是一个模型类(POJO 类),我需要在其他活动中访问该数据。以及我想放入 API(URL) 的数据。
  • 在其他活动中访问您已从意图传递数据的内容。或者该对象应该可以公开访问。
  • 好的,我明白了。但是当我在 ArrayList 中获取数据时,我如何从 ArrayList 中提取数据,因为 URL 不会将 ArrayList 作为输入。
  • 如果您需要传递整个数组数据,然后转换为 json 并发送该数据
  • 或根据您的要求使用模型类数据创建 url
【解决方案3】:

在“api 类”中有一个简单的方法

public static void getChilds(final String user_id,  Response.Listener<JSONObject> res) {
    String baseUrl = "http://qnabubackend-env.2fuz4eh5jh.ap-south-1.elasticbeanstalk.com/parent/api";
    JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, baseUrl + "/get/childs/"+user_id, null,
        res);
    // TODO: add request to Volley queue
}

在你的Activity中,你会调用

API.getChilds(id, new Response.Listener<JSONObject>()
        {
            @Override
            public void onResponse(JSONObject response)
            {
                 // Parse the response here 
                 // Update your Activity data 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2017-12-20
    • 2014-05-03
    • 1970-01-01
    • 2017-10-28
    • 2022-01-25
    相关资源
    最近更新 更多