Android Hashmap到JSON数组
我想问一下,这里是否有人知道如何将HashMap转换为JSON数组,以便在适配器上使用。逻辑是当您登录时,它将使用Volley在web服务器上获取数据,将其存储在SQLite数据库中,同时在自定义listview上显示检索数据。问题是,如果您移动到应用程序上的另一个片段,然后返回,它将再次请求截击,这需要时间。我希望,如果您返回SQLite数据库中存储的数据将被检索,并且如果用户希望使用SwipeRefresh更新数据,那么就是更新新数据的时候了 这是我的密码Android Hashmap到JSON数组,android,arrays,hashmap,Android,Arrays,Hashmap,我想问一下,这里是否有人知道如何将HashMap转换为JSON数组,以便在适配器上使用。逻辑是当您登录时,它将使用Volley在web服务器上获取数据,将其存储在SQLite数据库中,同时在自定义listview上显示检索数据。问题是,如果您移动到应用程序上的另一个片段,然后返回,它将再次请求截击,这需要时间。我希望,如果您返回SQLite数据库中存储的数据将被检索,并且如果用户希望使用SwipeRefresh更新数据,那么就是更新新数据的时候了 这是我的密码 public void LoadM
public void LoadMarkets()
{
Map<String,String>tmpRate = new HashMap<String,String>();
RateDb db = new RateDb(getActivity().getApplicationContext());
Cursor rs = db.getData();
if(rs!=null && rs.getCount()>0)
{
if(rs.moveToFirst())
{
while(rs.moveToNext())
{
tmpRate.put("rateID",rs.getString(rs.getColumnIndex(RateDb.rateID)));
tmpRate.put("Name",rs.getString(rs.getColumnIndex(RateDb.rateName)));
tmpRate.put("Rate",rs.getString(rs.getColumnIndex(RateDb.rateRate)));
tmpRate.put("Date",rs.getString(rs.getColumnIndex(RateDb.rateDate)));
tmpRate.put("Time",rs.getString(rs.getColumnIndex(RateDb.rateTime)));
tmpRate.put("Ask",rs.getString(rs.getColumnIndex(RateDb.rateAsk)));
tmpRate.put("Bid",rs.getString(rs.getColumnIndex(RateDb.rateBid)));
tmpRate.put("Balance",rs.getString(rs.getColumnIndex(RateDb.rateBalance)));
//Log.d("MyDebug",rs.getString(rs.getColumnIndex(RateDb.rateName)));
}
}
}
rs.close();
db.close();
JSONObject jsonObject = new JSONObject(tmpRate);
JSONArray jsonArray = new JSONArray();
jsonArray.put(jsonObject);
RowAAdapter rowAAdapter = new RowAAdapter(getActivity(),jsonArray);
lvMarkets.setAdapter(rowAAdapter);
swipeRefreshLayout.setRefreshing(false);
}
public void LoadMarkets()
{
MaptmpRate=newhashmap();
RateDb=新的RateDb(getActivity().getApplicationContext());
游标rs=db.getData();
如果(rs!=null&&rs.getCount()>0)
{
如果(rs.moveToFirst())
{
while(rs.moveToNext())
{
tmpRate.put(“rateID”,rs.getString(rs.getColumnIndex(RateDb.rateID));
tmpRate.put(“Name”,rs.getString(rs.getColumnIndex(RateDb.rateName));
tmpRate.put(“Rate”,rs.getString(rs.getColumnIndex(RateDb.rateRate));
tmpRate.put(“日期”,rs.getString(rs.getColumnIndex(RateDb.rateDate));
tmpRate.put(“Time”,rs.getString(rs.getColumnIndex(RateDb.rateTime));
tmpRate.put(“Ask”,rs.getString(rs.getColumnIndex(RateDb.rateAsk));
tmpRate.put(“Bid”,rs.getString(rs.getColumnIndex(RateDb.rateBid));
tmpRate.put(“Balance”,rs.getString(rs.getColumnIndex(RateDb.rateBalance));
//Log.d(“MyDebug”,rs.getString(rs.getColumnIndex(RateDb.rateName));
}
}
}
rs.close();
db.close();
JSONObject JSONObject=新的JSONObject(tmpRate);
JSONArray JSONArray=新的JSONArray();
jsonArray.put(jsonObject);
RowAAdapter RowAAdapter=新的RowAAdapter(getActivity(),jsonArray);
lvMarkets.setAdapter(rowAAdapter);
swipeRefreshLayout.setRefreshing(false);
}
问题是,当我加载这个函数时,它只显示最后的数据
我希望你能帮我解决我的问题
非常感谢。您可以将值直接放入jsonObject中,而不是像这样将其添加到hashmap中:
public void LoadMarkets()
{
RateDb db = new RateDb(getActivity().getApplicationContext());
Cursor rs = db.getData();
if(rs!=null && rs.getCount()>0)
{
if(rs.moveToFirst())
{
while(rs.moveToNext())
{
JSONObject jsonObject = new JSONObject();
jsonObject.put("rateID",rs.getString(rs.getColumnIndex(RateDb.rateID)));
jsonObject.put("Name",rs.getString(rs.getColumnIndex(RateDb.rateName)));
jsonObject.put("Rate",rs.getString(rs.getColumnIndex(RateDb.rateRate)));
jsonObject.put("Date",rs.getString(rs.getColumnIndex(RateDb.rateDate)));
jsonObject.put("Time",rs.getString(rs.getColumnIndex(RateDb.rateTime)));
jsonObject.put("Ask",rs.getString(rs.getColumnIndex(RateDb.rateAsk)));
jsonObject.put("Bid",rs.getString(rs.getColumnIndex(RateDb.rateBid)));
jsonObject.put("Balance",rs.getString(rs.getColumnIndex(RateDb.rateBalance)));
jsonArray.put(jsonObject);
//Log.d("MyDebug",rs.getString(rs.getColumnIndex(RateDb.rateName)));
}
}
}
rs.close();
db.close();
RowAAdapter rowAAdapter = new RowAAdapter(getActivity(),jsonArray);
lvMarkets.setAdapter(rowAAdapter);
swipeRefreshLayout.setRefreshing(false);
}
代码的问题在于:
您正在使用键
“rateID”、“Name”
放置值。。。等等。在while
循环中,一次又一次地使用新值替换以前的值,最后在hashmap中只有一组数据。这就是为什么只获取最后一组数据
试试上面的代码。它应该像预期的那样工作
这将在循环中创建一个新的JsonObject
,并在数据成功添加到jsonArray时将其添加到jsonArray中 为什么要使用hashmap,可以像在hashmaphow中一样将值直接放入jsonObject中?但是它认为它是一样的,我希望它是一个jsonarray,因为适配器被设置为jsonarrayif(rs.moveToFirst()){while(rs.moveToNext()){/*..*/}}
==没有第一行的数据…正确的观察结果@Selvin@AshishRanjan非常感谢你。