Я решил использовать Realm для разбора JSONArray
, который я получаю из Интернета, и храните его в базе данных. Но кажется, что realm не создает фактический файл базы данных, поскольку я всегда получаю пустой массив, когда я вызываю realm.allObjects
, и я искал файл базы данных в своем эмуляторе, и я не нашел папку databases
в папке с данными приложения , Самое интересное, что когда я удалить return
заявление отReal ORM для Android не создает базу данных
if(pois == null || pois.size() == 0){ loadPoisFromNet(); return; }
он загружает элементы из сети и показывает их в списке, как и ожидалось, но в другой раз, когда я открываю activity
он начинает загружать их из web снова и размер предметов всегда 0. Может ли кто-нибудь мне помочь, пожалуйста?
public class PoiListFragment extends Fragment implements PoiListAdapter.OnOpenMapClickListener,
AdapterView.OnItemClickListener{
private Realm realm;
private PoiListAdapter mAdapter;
private ListView mListView;
private ProgressDialog progressDialog;
public PoiListFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RealmConfiguration realmConfig = new RealmConfiguration.Builder(getActivity()).build();
Realm.deleteRealm(realmConfig);
realm = Realm.getInstance(realmConfig);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_poi_list, container, false);
mListView = (ListView) v.findViewById(R.id.poi_listview);
return v;
}
@Override
public void onResume() {
super.onResume();
initPoisList();
}
private void initPoisList(){
RealmResults<Poi> pois = realm.allObjects(Poi.class);
if(pois == null || pois.size() == 0){
loadPoisFromNet();
return;
}
mAdapter = new PoiListAdapter(getActivity(), pois, true, this);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
Log.d("testt", "size " + mListView.getCount());
}
private void loadPoisFromNet() {
if(!Utils.isNetworkAvailable(getActivity())){
DialogUtils.showOfflineDialogAndFinish(getActivity());
return;
}
showProgressDialog();
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(ApiRequest.getPoiListUrl(), null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
realm.beginTransaction();
try {
realm.createAllFromJson(Poi.class, response.getString("list"));
realm.commitTransaction();
} catch (JSONException e) {
e.printStackTrace();
realm.cancelTransaction();
}
cancelProgressDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
cancelProgressDialog();
}
});
ApiRequest.getInstance(getActivity().getApplicationContext()).addToRequestQueue(jsObjRequest);
}
@Override
public void onOpenMapClick(int position) {
Poi poi = mAdapter.getRealmResults().get(position);
Utils.openMap(getActivity(), poi);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onDestroy() {
super.onDestroy();
realm.close(); // Remember to close Realm when done.
}
private void showProgressDialog(){
progressDialog = DialogUtils.showTransparentProgress(getActivity());
}
private void cancelProgressDialog(){
if (progressDialog != null && progressDialog.isShowing()){
progressDialog.cancel();
}
}
}