Android的Real ORM不创建数据库

Android的Real ORM不创建数据库,android,realm,Android,Realm,我决定使用Realm解析我从web获得的JSONArray,并将其存储在数据库中。但似乎realm并没有创建实际的数据库文件,因为我在调用realm.allObjects时总是得到一个空数组,我在emulator中查找了一个数据库文件,但在应用程序的数据文件夹中没有找到任何databases文件夹。有趣的是,当我从 if(pois==null | | pois.size()==0){ loadpois fromnet(); 返回; } 它从网络加载项目,并按预期在列表中显示它们,但另一次当我打开

我决定使用Realm解析我从web获得的
JSONArray
,并将其存储在数据库中。但似乎realm并没有创建实际的数据库文件,因为我在调用
realm.allObjects
时总是得到一个空数组,我在emulator中查找了一个数据库文件,但在应用程序的数据文件夹中没有找到任何
databases
文件夹。有趣的是,当我从

if(pois==null | | pois.size()==0){
loadpois fromnet();
返回;
}

它从网络加载项目,并按预期在列表中显示它们,但另一次当我打开
活动时,它再次开始从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();
        }
    }
}
公共类PoiListFragment扩展片段实现PoiListAdapter.OnOpenMapClickListener,
AdapterView.OnItemClickListener{
私人领域;
私人POILISTAPTER;
私有列表视图;
私有进程对话;
公共PoiListFragment(){
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
RealmConfiguration realmConfig=newrealmConfiguration.Builder(getActivity()).build();
Realm.deleteRealm(realmConfig);
realm=realm.getInstance(realmConfig);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.fragment\u poi\u list,容器,false);
mListView=(ListView)v.findViewById(R.id.poi_ListView);
返回v;
}
@凌驾
恢复时公开作废(){
super.onResume();
initpoissist();
}
私有void initpois列表(){
RealmResults pois=realm.allObjects(Poi.class);
if(pois==null | | pois.size()==0){
loadpois fromnet();
返回;
}
mAdapter=new PoiListAdapter(getActivity(),pois,true,this);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(此);
Log.d(“testt”,“size”+mListView.getCount());
}
私有void loadpois fromNet(){
如果(!Utils.isNetworkAvailable(getActivity())){
showOfflineDialogAndFinish(getActivity());
返回;
}
showProgressDialog();
JsonObjectRequest jsObjRequest=新的JsonObjectRequest
(APIRESQUEST.getPoiListUrl(),null,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
realm.beginTransaction();
试一试{
realm.createAllFromJson(Poi.class,response.getString(“list”);
realm.commitTransaction();
}捕获(JSONException e){
e、 printStackTrace();
realm.cancelTransaction();
}
取消进程对话框();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
取消进程对话框();
}
});
ApiRequest.getInstance(getActivity().getApplicationContext()).addToRequestQueue(jsObjRequest);
}
@凌驾
打开映射单击时的公共无效(内部位置){
Poi Poi=mAdapter.getRealmResults().get(位置);
Utils.openMap(getActivity(),poi);
}
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
}
@凌驾
公共空间{
super.ondestory();
realm.close();//完成后记得关闭realm。
}
私有void showProgressDialog(){
progressDialog=DialogUtils.showTransparentProgress(getActivity());
}
私有void cancelProgressDialog(){
if(progressDialog!=null&&progressDialog.isShowing()){
progressDialog.cancel();
}
}
}

我自己找到了这个奇怪行为的答案。 问题出在领域的示例代码中。在所有示例中,
领域
对象的实例化方式如下:

RealmConfiguration realmConfig = new RealmConfiguration.Builder(getActivity()).build();
Realm.deleteRealm(realmConfig);
realm = Realm.getInstance(realmConfig); 
我不知道他们为什么这样实例化它,但它似乎删除了所有以前保存的数据。相反,我只是通过调用
Realm=Realm.getInstance(getActivity())实例化了
Realm
对象一切正常