2017-07-04 8 views
1

VolleyとORMLiteと一緒にデータからリストビューを生成しようとしています。私がページをリフレッシュまたはリロードするためにプルを実行すると、データが表示されます。私はページをリロードすると、私はのupdateUI()関数を使用しています:リストビューがonCreateのVolleyのデータで埋められていない

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

私が作ってるんだVolleyCallは、APIからデータを取得し、ORMLiteでデータベースに保存されてきている管理オブジェクト、それを解析しています。

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

    } 
} 

私はどこに問題があるのか​​分からないので、私の問題は何人か知っているかもしれません。 EDITEDアドバンス

ありがとう:Shubham Goelさんへ

おかげで、私は解決策を見つけた:

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

これは、volley読み込み時にデータが読み込まれ、データを読み込むのに時間がかかるからです...すべてのupdateUI機能がリスト内のデータなしで実行されるまでは、これは必須ですデータをリフレッシュする前に、データはボレーのリクエストによって読み込まれ、リストに表示されます。

+0

ページがロードされる前にボレーコールが行われたことをどのように確認できるかについてのご意見はありますか? –

+0

ここにVolleyHandlerクラスコードを投稿できますか? @OrlandoSmits –

関連する問題