2015-01-03 4 views
1

ListView가 있는데 데이터 용으로 Parse.com을 사용하고 있습니다. ParseQueryAdapter를 사용하여 ListView를 처리하고 있습니다. 그러나 어댑터에서 데이터를 가져올 수는 없습니다.ParseQueryAdapter가 항목을 가져 오지 않습니다.

여기

내 코드입니다 .. 다른 게터와 세터와 함께

public class MainActivity extends ActionBarActivity { 

    private ArrayList<Date> dateHeaders; 
    private HashMap<Date,ArrayList<Sessions>> dateContent; 

    private ParseQueryAdapter<Sessions> sessionsQueryAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.d("test", "query"); 
     Parse.enableLocalDatastore(this); 
     Parse.initialize(this, "xxx", "xxx"); 
     ParseObject.registerSubclass(Sessions.class); 

     //sessionHeaderFetch(); 
     ParseQueryAdapter.QueryFactory<Sessions> factory = new ParseQueryAdapter.QueryFactory<Sessions>(){ 
      @Override 
      public ParseQuery<Sessions> create() { 
       ParseQuery<Sessions> query = Sessions.getQuery(); 
       query.include("sessionId"); 
       query.include("Location"); 
       Log.d("test", "query"); 
       return query; 
      } 
     }; 

     sessionsQueryAdapter = new ParseQueryAdapter<Sessions>(this, factory){ 
      public View getItemView(Sessions sessions, View view, ViewGroup parent){ 
       if(view == null){ 
        view = View.inflate(getContext(), R.layout.session_list_item, null); 
       } 
       Log.d("test", "adapter"); 
       TextView teamName = (TextView) view.findViewById(R.id.teamName); 
       TextView location = (TextView) view.findViewById(R.id.location); 
       TextView time = (TextView) view.findViewById(R.id.netsTime); 
       TextView slots = (TextView) view.findViewById(R.id.slots); 
       TextView bookedSlots = (TextView) view.findViewById(R.id.players); 
       TextView openSlots = (TextView) view.findViewById(R.id.openSlots); 
       teamName.setText(sessions.getSessionId()); 
       location.setText(sessions.getLocation()); 
       time.setText((CharSequence) sessions.getNetsDate()); 
       slots.setText(sessions.getSlots()); 
       bookedSlots.setText(sessions.getOpenSlots()); 
       openSlots.setText(sessions.getOpenSlots()); 
       return view; 
      } 
     }; 

     sessionsQueryAdapter.setAutoload(false); 
     sessionsQueryAdapter.setPaginationEnabled(false); 

     ListView listView = (ListView) findViewById(R.id.expandableListView); 
     sessionsQueryAdapter.setTextKey("sessionId"); 
     listView.setAdapter(sessionsQueryAdapter); 

    } 
} 

나는 다음과 같은 방법뿐만 아니라 안에 내 구문 분석 모델 클래스가 있습니다. 당신이 채팅에서 저와 코드를 공유 한 후

public static ParseQuery<Sessions> getQuery() { 
     Log.d("test", "inside query"); 
     return ParseQuery.getQuery(Sessions.class); 
    } 

구문 분석 클래스

@ParseClassName("Sessions") 
public class Sessions extends ParseObject { 
    public Sessions(){ 

    } 

    public String sessionId; 
    public String location; 
    public String netNo; 
    public String userId; 
    public int slots; 
    public int openSlots; 
    public Date netsDate; 

    public String getSessionId() { 
     return getString("SessionId"); 
    } 

    public void setSessionId(String sessionId) { 
     put("SessionId", sessionId); 
    } 

    public String getLocation() { 
     return getString("Location"); 
    } 

    public void setLocation(String location) { 
     put("Location", location); 
    } 

    public String getNetNo() { 
     return getString("NetNo"); 
    } 

    public void setNetNo(String netNo) { 
     put("NetNo", netNo); 
    } 

    public String getUserId() { 
     return getString("UserId"); 
    } 

    public void setUserId(String userId) { 
     put("UserId", userId); 
    } 

    public int getSlots() { 
     return getInt("Slots"); 
    } 

    public void setSlots(int slots) { 
     put("Slots", slots); 
    } 

    public int getOpenSlots() { 
     return getInt("OpenSlots"); 
    } 

    public void setOpenSlots(int openSlots) { 
     put("OpenSlots", openSlots); 
    } 

    public Date getNetsDate() { 
     return getDate("NetsDate"); 
    } 

    public void setNetsDate(Date netsDate) { 
     put("NetsDate", netsDate); 
    } 

    public static ParseQuery<Sessions> getQuery() { 
     Log.d("test", "inside query"); 
     return ParseQuery.getQuery(Sessions.class); 
    } 
} 
+0

당신이 로그 아웃 얻을 볼 수 있습니까? 예 : "내부 쿼리"및 "쿼리"? –

+0

아무것도 기록되지 않습니다. Log.d ("test", "query"); 아래 setContentView가 실행 중입니다 .. 확실하지 않은 이유 –

+0

그래서 Session 클래스가 있고 @ParseClass로 주석을 달았습니까? –

답변

1

, 나는 이것이 당신을위한 최고의 솔루션이라고 생각이에 parseIO 변경 :

public class ParseIO { 

public void sessionFetch(Date headers, final ParseIOListener<Sessions> listener){ 
    ParseQuery<Sessions> query = ParseQuery.getQuery(Sessions.class); 
    query.whereEqualTo("NetsDate",headers); 
    final ArrayList<Sessions> sessionsData = new ArrayList<Sessions>(); 
    query.findInBackground(new FindCallback<Sessions>() { 
     @Override 
     public void done(List<Sessions> sessionsObjects, com.parse.ParseException e) { 
      if (e == null) { 
       for (Sessions session : sessionsObjects) { 
        sessionsData.add(session); 
       } 
       listener.onDataRetrieved(sessionsData); 
      } else { 
       listener.onDataRetrieveFail(e); 
      } 
     } 
    }); 
} 

public void sessionHeaderFetch(final ParseIOListener<Date> listener){ 

     Log.d("test", "session fetch entry"); 
     ParseQuery<Sessions> query = ParseQuery.getQuery(Sessions.class); 
     final ArrayList<Date> sessionHeaders = new ArrayList<Date>(); 
     query.findInBackground(new FindCallback<Sessions>() { 
      @Override 
      public void done(List<Sessions> sessionsObjects, com.parse.ParseException e) { 
       if (e == null) { 
        Log.d("test", "Retrieved -- hello" + sessionsObjects.size() + " sessions"); 
        for (Sessions session : sessionsObjects) { 
         sessionHeaders.add(session.getNetsDate()); 
        } 
        Log.d("test", "Parse fetched headers" + sessionHeaders.size()); 
        listener.onDataRetrieved(sessionHeaders); 
       } else { 
        Log.d("test", "Error: " + e.getMessage()); 
        listener.onDataRetrieveFail(e); 
       } 
      } 
     }); 

    } 

    public interface ParseIOListener<T>{ 
     void onDataRetrieved(ArrayList<T> listOfData); 
     void onDataRetrieveFail(ParseException e); 
    } 
} 

당신의 방법을 발견하면 이제 무효가됩니다. 그러나 인터페이스가 필요합니다. 이 메서드를 호출 할 때 그래서 당신은 인터페이스를 설정할 수 있으며 호출 할 때 예는 헤더를 취득하는 것은 그래서 당신의 데이터 가 포함됩니다

sessionHeaderFetch(new ParseIOListener<Date>() { 
    @Override 
    public void onDataRetrieved(ArrayList<Date> listOfData) { 
     //here you have your listOfData 
    } 

    @Override 
    public void onDataRetrieveFail(ParseException e) { 
     //error. Log it out and handle it here 
    } 
}); 
관련 문제