2017-12-19 26 views
0

데이터베이스가 백엔드리스에 설치되어 있고 Android Studio 응용 프로그램에서 액세스하고 있습니다. 연결이 성공하고 항목 이름이 로그별로 성공적으로 검색되지만 목록보기에 표시되지 않습니다. 항목 "test"를 로컬에 추가했는데이 정보가 표시됩니다. 도울 수 있니? 따라서 당신이 표시되지 않습니다 - 당신은 비동기 적으로 데이터를로드하는 때문에ListView에 백엔드가없는 안드로이드 스튜디오 데이터 검색이 나타나지 않습니다.

public class ListItems extends Activity { 

ListView foodListView; 
ArrayList<String> myFood; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //set up listView 
    setContentView(R.layout.list_items); 
    foodListView = (ListView)findViewById(R.id.foodListView); 
    myFood = new ArrayList(); 
    myFood.add("test"); 

    //connect to database 
    Backendless.setUrl(Defaults.SERVER_URL); 
    Backendless.initApp(getApplicationContext(), 
      Defaults.APPLICATION_ID, 
      Defaults.API_KEY); 

    final IDataStore<Map> tableQuery = Backendless.Data.of("FoodList"); 
    final DataQueryBuilder queryBuilder = DataQueryBuilder.create(); 

    queryBuilder.setWhereClause("Section = 'Dairy'"); 
    queryBuilder.setSortBy("name"); 

    Backendless.Data.of("FoodList").find(queryBuilder, 
      new AsyncCallback<List<Map>>() 
      { 
       @Override 
       public void handleResponse(List<Map>response){ 

        Iterator<Map> itr = response.iterator(); 

        while(itr.hasNext()) { 
         Map<String, Object> contact = (Map<String, Object>) itr.next(); 
         String name = (String) contact.get("Name"); 
         myFood.add(name); 
        } 

        //test to show items retrived 
        for(String aa:myFood){ 
         System.out.println("MYAPP " +aa); 
        } 


       } 
       @Override 
       public void handleFault(BackendlessFault fault) 
       { 
        Log.e("MYAPP", "Server reported an error - " + fault.getMessage()); 
       } 
      }); 


    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myFood); 
    foodListView.setAdapter(arrayAdapter); 


} 

}

+0

https://stackoverflow.com/a/19043140/1813669 – Scadge

+0

내가 arrayAdapter.notifyDataSetChanged을 (시도)하지만이 작동하지 않습니다 나는 여전히 :

그래서 당신의 코드를 다음과 같이 표시되어야합니다 "테스트"를 보여주는 목록을 얻습니다. 내보기를 설정할 때 데이터가 완전하지 않은 것을 검색하는 것과 관련이 있습니까? – Newbie123

+0

확실히 있습니다. 어디서'.notifyDataSetChanged()'를 호출합니까? – Scadge

답변

0

, 당신의 ListView는 이전 데이터가 도착보다 표시 될 수 있습니다 여기 내 코드입니다. 이 문제를 해결하려면 handleResponse 메소드 내부의 데이터 소스 목록을 업데이트 한 직후 ListView에서 notifyDataSetChanged()으로 전화해야합니다.

public class ListItems extends Activity { 

ListView foodListView; 
ArrayList<String> myFood; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //set up listView 
    setContentView(R.layout.list_items); 
    foodListView = (ListView)findViewById(R.id.foodListView); 
    myFood = new ArrayList(); 

    //connect to database 
    Backendless.setUrl(Defaults.SERVER_URL); 
    Backendless.initApp(getApplicationContext(), Defaults.APPLICATION_ID, Defaults.API_KEY); 

    final IDataStore<Map> tableQuery = Backendless.Data.of("FoodList"); 
    final DataQueryBuilder queryBuilder = DataQueryBuilder.create(); 

    queryBuilder.setWhereClause("Section = 'Dairy'"); 
    queryBuilder.setSortBy("name"); 

    Backendless.Data.of("FoodList").find(queryBuilder, 
      new AsyncCallback<List<Map>>() 
      { 
       @Override 
       public void handleResponse(List<Map>response){ 

        Iterator<Map> itr = response.iterator(); 

        while(itr.hasNext()) { 
         Map<String, Object> contact = (Map<String, Object>) itr.next(); 
         String name = (String) contact.get("Name"); 
         myFood.add(name); 
        } 

        // new data has been now added to the list - need to update view 
        foodListView.notifyDataSetChanged(); 
       } 
       @Override 
       public void handleFault(BackendlessFault fault) 
       { 
        Log.e("MYAPP", "Server reported an error - " + fault.getMessage()); 
       } 
      }); 


    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myFood); 
    foodListView.setAdapter(arrayAdapter); 


}