【问题标题】:android load sqlite data in fragmentandroid在片段中加载sqlite数据
【发布时间】:2013-03-08 06:36:18
【问题描述】:

我遇到了无法在 Fragment 中加载 sqlite 数据的问题,如下所示

public class ListFragment extends Fragment {

    DatabaseUtil dbUtil = new DatabaseUtil(this.getActivity());
    private ArrayList <HashMap<String, Object>> getNews;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View v = inflater.inflate(R.layout.activity_list, container, false);


        new LoadNewsLists().execute("");        

        return v;
    }

这里是从 sqlite 加载数据

Cursor cursor = dbUtil.fetchAllData(arg[0]);

遇到以下错误。

03-08 12:21:52.900: E/AndroidRuntime(25895): Caused by: java.lang.NullPointerException
03-08 12:21:52.900: E/AndroidRuntime(25895):    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)

【问题讨论】:

  • 确保你只在一个线程中使用过多的数据库
  • 试试这个 public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState);新的 LoadNewsLists().execute(""); }
  • 对不起,发生同样的错误。

标签: android sqlite android-fragments


【解决方案1】:

你不能在定义它的同时初始化你的 db 对象。您应该将初始化代码移至onCreateView() 回调:

DatabaseUtil dbUtil ;
private ArrayList <HashMap<String, Object>> getNews;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View v = inflater.inflate(R.layout.activity_list, container, false);

    dbUtil = new DatabaseUtil(getActivity());
    new LoadNewsLists().execute("");        

    return v;
}

【讨论】:

    【解决方案2】:

    我不确定DatabaseUtil(this.getActivity()) 构造函数内部发生了什么,但在到达Fragment.onActivityCreated() 回调之前,您不应该依赖完全初始化的Activity。

    【讨论】:

      猜你喜欢
      • 2014-01-23
      • 1970-01-01
      • 2017-05-28
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 2015-01-14
      相关资源
      最近更新 更多