2013-03-08 2 views
2

Я получаю проблему, которая не может загрузить данные в SQLite фрагменте, как следоватьандроид загрузки данных 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) 
+0

Убедитесь, что вы используете db только в одном потоке – DjHacktorReborn

+0

yap, это очень точно. – ppshein

+0

попробуйте эту общедоступную void onActivityCreated (Bundle savedInstanceState) { super.onActivityCreated (savedInstanceState); новый LoadNewsLists(). Execute (""); } – DjHacktorReborn

ответ

3

Вы не можете инициировать свой объект 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; 
} 
1

Я не уверен, что происходит внутри DatabaseUtil(this.getActivity()) конструктора, но вы не должны полагаться на активность будучи полностью инициализирован, пока вы не достигнете Fragment.onActivityCreated() обратного вызова.

Смежные вопросы