Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Hashmap到JSON数组_Android_Arrays_Hashmap - Fatal编程技术网

Android Hashmap到JSON数组

Android Hashmap到JSON数组,android,arrays,hashmap,Android,Arrays,Hashmap,我想问一下,这里是否有人知道如何将HashMap转换为JSON数组,以便在适配器上使用。逻辑是当您登录时,它将使用Volley在web服务器上获取数据,将其存储在SQLite数据库中,同时在自定义listview上显示检索数据。问题是,如果您移动到应用程序上的另一个片段,然后返回,它将再次请求截击,这需要时间。我希望,如果您返回SQLite数据库中存储的数据将被检索,并且如果用户希望使用SwipeRefresh更新数据,那么就是更新新数据的时候了 这是我的密码 public void LoadM

我想问一下,这里是否有人知道如何将HashMap转换为JSON数组,以便在适配器上使用。逻辑是当您登录时,它将使用Volley在web服务器上获取数据,将其存储在SQLite数据库中,同时在自定义listview上显示检索数据。问题是,如果您移动到应用程序上的另一个片段,然后返回,它将再次请求截击,这需要时间。我希望,如果您返回SQLite数据库中存储的数据将被检索,并且如果用户希望使用SwipeRefresh更新数据,那么就是更新新数据的时候了

这是我的密码

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,因为适配器被设置为jsonarray
if(rs.moveToFirst()){while(rs.moveToNext()){/*..*/}}
==没有第一行的数据…正确的观察结果@Selvin@AshishRanjan非常感谢你。