2017-07-04 22 views
1

我試圖從數據與Volley和ORMLite一起生成列表視圖。當我執行拉動刷新或重新加載頁面時,會顯示數據。當我重裝我使用的是updateUI()函數的頁面:列表視圖未使用來自Volley的數據onCreate

private void updateUI() throws SQLException { 
    mAdministrationList.clear(); 
    mAdminstrationAdapter = new AdministrationAdapter(this, getLayoutInflater(), mAdministrationList); 
    mVolleyHandler.GETAdministrations(); 
    mAdministrationList = mAdministrationDao.queryForAll(); 


    mAdminstrationListView.setAdapter(mAdminstrationAdapter); 
    mAdminstrationListView.setOnItemClickListener(this); 
    mAdminstrationAdapter.notifyDataSetChanged(); 
} 

此功能,但該列表是,如上面提到的,只有裝上拉刷新。

我的onCreate看起來是這樣的:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_administration); 

    mAdminstrationListView = (ListView) findViewById(R.id.administrationListView); 

    mProgressSpinner = (ProgressBar) findViewById(R.id.administration_spinner); 

    try { 
     mAdministrationDao = getHelper().getAdministrationDao(); 
     mGlobalsDao = getHelper().getGlobalsDao(); 
     mGlobals = mGlobalsDao.queryForAll().get(0); 

     mCurrentAdministration = mGlobals.getAdministration(); 
     mToken = mGlobals.getToken(); 
     mUser = mGlobals.getUser(); 

     mVolleyHandler = VolleyHandler.getInstance(this, mGlobals.getIpAddress(), mCurrentAdministration, mUser, mToken); 

     updateUI(); 
     mAdminstrationAdapter.notifyDataSetChanged(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

    mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.administrationSwipe); 
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      try { 
       updateUI(); 

       mAdminstrationAdapter.notifyDataSetChanged(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 

      mSwipeRefreshLayout.setRefreshing(false); 
     } 
    }); 
} 

我正在從API獲取數據,並將其解析到一個管理對象,誰獲得保存與ORMLite數據庫VolleyCall。

public void ParseAdministration(String response) throws JSONException, SQLException { 
    JSONObject jsonObject = new JSONObject(response); 
    JSONArray results = jsonObject.getJSONArray("results"); 

    for (int i = 0; i < results.length(); i++) { 

     JSONObject object = results.getJSONObject(i); 

     Administration administration = new Administration(); 
     administration.setId(Long.valueOf(object.getString("id"))); 
     administration.setName(object.getString("name")); 
     administration.setAddress1(object.getString("address1")); 
     administration.setAddress2(object.getString("address2")); 
     administration.setPostalCode(object.getString("postalCode")); 
     administration.setCity(object.getString("city")); 
     administration.setCountry(object.getString("country")); 

     mDatabaseHelper.saveAdministration(administration); 

    } 
} 

我找不到問題所在,所以也許你們有些人知道我的問題是什麼。

由於提前

編輯:

感謝Shubham戈埃爾,我已經找到了解決辦法:

new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        mProgressSpinner = (ProgressBar) findViewById(R.id.administration_spinner); 
        updateUI(); 
       } catch (SQLException e) { 
        e.printStackTrace(); 
       } 

       mProgressSpinner.setVisibility(View.GONE); 
      } 
     }, 3000); 

也許這是一個有點髒,但它的工作。讓我知道如果你認爲有更好的解決方案:)

回答

0

這必須是因爲在創建凌空加載數據,並需要一些時間來加載數據......直到那時所有的updateUI功能執行列表中沒有數據..在你刷新之前,數據已經被排除請求加載並顯示在列表中。

+0

關於如何確保在頁面加載之前進行過抽樣調用的任何建議? –

+0

你可以在這裏發佈你的VolleyHandler類代碼嗎? @OrlandoSmits –

相關問題