【发布时间】:2023-03-16 15:39:01
【问题描述】:
所以我正在尝试填充 HashMap> 但是当我调试时,我看到我的 HashMap “gegevens” 填充没有问题,但我的主要 HashMap “events” 没有。我正在用 JSON 数据填充我的 HashMap,但这根据调试器工作。只有我的事件 HashMap 保持为空。这是我使用的方法:
private HashMap<String,HashMap<String,String>> events = new HashMap<String,HashMap<String,String>>();
public class ReadJSONFeedTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls){
return readJSONFeed(urls[0]);
}
protected void onPostExecute(String result){
try{
JSONObject object = new JSONObject(result);
String channel = object.getString("channel");
JSONObject object2 = new JSONObject(channel);
JSONArray item = object2.getJSONArray("item");
for(int i = 0; i < item.length();i++)
{
HashMap<String,String> gegevens = new HashMap<String,String>();
JSONObject object3 = item.getJSONObject(i);
JSONObject objTitle = object3.getJSONObject("title");
String title = objTitle.getString("@text");
JSONObject objLink = object3.getJSONObject("link");
String link = objLink.getString("@text");
JSONObject objDescription = object3.getJSONObject("description");
String description = objDescription.getString("@text");
JSONObject objPubDate = object3.getJSONObject("pubDate");
String pubDate = objPubDate.getString("@text");
JSONObject objCreator = object3.getJSONObject("http://purl.org/dc/elements/1.1/creator");
String creator = objCreator.getString("@text");
JSONObject objGuid = object3.getJSONObject("guid");
String guid = objGuid.getString("@text");
gegevens.put("link",link);
gegevens.put("description",description);
gegevens.put("pubDate",pubDate);
gegevens.put("creator",creator);
gegevens.put("guid",guid);
events.put(title,gegevens);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
我看不出我做错了什么,但我很新,这是我第一次在 HashMap 中使用 HashMap,所以我认为我的错误很可能就在那儿。我必须能够在另一个类中使用事件 HashMap。
这段代码在我更大的 MainActivity.Java 类中。我正在尝试将我的事件 HashMap 传递给另一个框架。我通过创建一个 getter 来做到这一点,我首先让它执行 ReadJSONFeedTask(),然后像这样返回事件 HashMap:
public HashMap<String,HashMap<String,String>> getEvents()
{
new ReadJSONFeedTask().execute("http://data.kortrijk.be/nieuws/rss.json?%2Fkortrijk%2F%2Fnieuws%2Frss=");
return events;
}
在我的 HomeFragment.java 中,我试图像这样访问 OnCreateView 中的 HashMap:
package com.example.arno.eventaris.Fragment;
import android.app.DialogFragment;
import android.net.wifi.WifiConfiguration;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.arno.eventaris.Activity.JSONActivity;
import com.example.arno.eventaris.Activity.MainActivity;
import com.example.arno.eventaris.Error.ErrorJason;
import com.example.arno.eventaris.R;
import java.util.HashMap;
/**
* A simple {@link Fragment} subclass.
*/
public class HomeFragment extends Fragment {
public HomeFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
//((MainActivity)getActivity()).ExecuteJson();
HashMap events =((MainActivity)getActivity()).getEvents();
return inflater.inflate(R.layout.fragment_home, container, false);
}
}
【问题讨论】:
-
一般来说,将一个hashmap作为另一个hashmap的值是没有问题的。你的问题必须在其他地方。您是否看到任何打印到控制台的异常?
-
不,我唯一看到的是事件 HashMap 的长度在循环期间保持为 0,而当循环重新开始时,事件变量再次消失。
-
是否有可能我的事件确实被数据填充但在循环重新开始后立即清空?
-
您的
events变量在哪里准确定义?在您的代码示例中,它位于类之上(不可能)。是否在类中定义为成员变量? -
这只是我的一段代码,所有这些都发生在我更大的 MainActivity.Java 类中。我在 MainAcitivity 中声明了它,以便我可以在不同的方法中使用它。