2016-07-12 3 views
-1

HashMap을 JSON Array로 변환하여 어댑터에서 사용하는 방법을 알고있는 사람이 있는지 물어보고 싶습니다. 논리는 로그인 할 때, Volley를 사용하여 웹 서버에서 데이터를 가져 와서 SQLite 데이터베이스에 저장하고 동시에 사용자 지정 목록보기에서 검색 데이터를 표시합니다. 문제는 응용 프로그램에서 다른 조각으로 이동 한 다음 돌아가는 경우 발리에서 다시 소요될 시간을 요청합니다. 필자는 SQLite 데이터베이스에 저장된 데이터를 검색하고 SwipeRefresh를 사용하여 데이터를 업데이트하려는 경우 새로운 데이터를 업데이트 할 시간을 가져 왔으면합니다.Hashmap to JSON Array

여기 내 코드입니다.

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); 
} 

문제는이 기능을로드 할 때 마지막 데이터 만 표시된다는 것입니다.

제 문제로 저를 도울 수 있기를 바랍니다.

대단히 감사합니다.

+0

해시 맵을 사용하는 이유는 무엇입니까? hashmap을 넣는 것처럼 값을 jsonObject에 직접 입력 할 수 있습니다. –

+0

어떻게? 하지만 그것은 똑같은 생각하고 JSONArray로 어댑터가 설정되어 있기 때문에 내가 jsonarray 싶었어요 – Raven

+0

대답을 확인하십시오 –

답변

0

이 같은 해시 맵에 추가하는 대신 된 JSONObject에 직접 값을 넣을 수 있습니다 :

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); 
} 

코드의 문제가 있다는 것입니다 : 당신은 valueskeys로 옮기고

"rateID", "Name" ... 등등을 반복적으로 반복하므로 이전 값이 새 값으로 바뀌고 마지막으로 해시 맵에 하나의 데이터 세트 만 있습니다. 이것이 바로 마지막 데이터 세트를 얻는 이유입니다.

위의 코드를 사용해보십시오. 예상대로 작동해야합니다.

이것은 루프에 새로운 JsonObject을 생성하고 데이터가 성공적으로 추가되면 jsonArray에 추가하기 때문에 작동합니다.