- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想使用Listview来显示SQLite数据库中的数据。我使用 Fragment 来获取 ListView 。但现在,我遇到了一个问题:
This is the Log info:
E/AndroidRuntime(12816): FATAL EXCEPTION: main
E/AndroidRuntime(12816): java.lang.NullPointerException
E/AndroidRuntime(12816): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
E/AndroidRuntime(12816): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
E/AndroidRuntime(12816): at com.tax_ui.sql.Inform_dbHandler.getAllInform(Inform_dbHandler.java:80)
E/AndroidRuntime(12816): at com.tax_ui.fragment.InformFragment.init(InformFragment.java:72)
E/AndroidRuntime(12816): at com.tax_ui.fragment.InformFragment.onCreateView(InformFragment.java:55)
这是列表适配器代码:
public class InformListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Inform_item> inform_item_list;
public InformListAdapter(Activity activity,
List<Inform_item> inform_item_list) {
this.activity = activity;
this.inform_item_list = inform_item_list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return inform_item_list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return inform_item_list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.fragment_inform_item, null);
TextView title = (TextView) convertView.findViewById(R.id.inform_title);
TextView timestamp = (TextView) convertView
.findViewById(R.id.inform_timestamp);
TextView content = (TextView) convertView
.findViewById(R.id.inform_content);
Inform_item inform_item = inform_item_list.get(position);
title.setText(inform_item.get_title());
timestamp.setText(inform_item.get_timestamp());
content.setText(inform_item.get_content());
return null;
}
}
然后,这是我的 fragment 代码:
public class InformFragment extends Fragment {
private View mBaseView;
private TitleBarView mTitleBarView;
private ListView listView;
private InformListAdapter listAdapter;
private List<Inform_item> inform_item_list;
private Inform_dbHandler inform_dbHandler = new Inform_dbHandler(getActivity());
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
getActivity();
mBaseView=inflater.inflate(R.layout.fragment_inform_list, null);
findView();
init();
return mBaseView;
}
private void findView(){
mTitleBarView=(TitleBarView) mBaseView.findViewById(R.id.title_bar);
listView = (ListView)mBaseView.findViewById(R.id.inform_list);
}
private void init(){
mTitleBarView.setCommonTitle(View.GONE, View.VISIBLE, View.GONE);
mTitleBarView.setTitleText(R.string.inform);
inform_item_list = new ArrayList<Inform_item>();
inform_item_list = inform_dbHandler.getAllInform();
listAdapter = new InformListAdapter(getActivity(), inform_item_list);
listView.setAdapter(listAdapter);
}
}
我认为这行可能是错误的:
private Inform_dbHandler inform_dbHandler =
new Inform_dbHandler(getActivity());
但我不知道如何解决这个问题?你能帮助我吗?谢谢~
最佳答案
修改如下:
private Inform_dbHandler inform_dbHandler ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
getActivity();
mBaseView=inflater.inflate(R.layout.fragment_inform_list, null);
findView();
init();
Inform_dbHandler inform_dbHandler = new Inform_dbHandler(getActivity());
return mBaseView;
}
问题是您正在为 dbhandler 创建对象,但该对象将在附加到 Activity 之前进行初始化。在这种情况下 getActivity() 方法返回 null,因此数据库将无法计算出来。
那么最佳实践是如果您希望 dbhelper 类对象全局初始化该对象
OnAttach()
fragment 。
关于java - Android NullPointerException(getDatabaseLocked 和 getWritableDatabase),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27921591/
我正在尝试访问 sqlite 数据库,但我不知道我的代码做错了什么。我不知道问题出在哪里。你能看看吗? public class DatabaseManager { private SQLit
我不知道是什么锁定了我的数据库。这个应用程序在生产中是全新的,我什至无法执行第一个将用户添加到数据库的操作。我有一个 DatabaseHandler 可以执行所有数据库操作。我的 Activity 正
我的程序有问题。我使用数据库来保存我的应用程序的设置。当我在应用程序中保存密码时一切正常,但是当我使用原则上相同的方法保存“学校类(class)”的名称时,但另一个表崩溃了,我遇到了这个错误: 02-
我有一个名为 CheckForUpdates 的专用类,它扩展了 ASyncTask,用于解析来自 Internet 的 JSON 文件。创建 CheckForUpdates 类并从主 Activit
我试图在一个方法中存储特定的列数据,并在另一个类 String [] 中调用该方法,其中微调器将访问该数组以显示列行供用户选择,然后将其存储在另一个数据库中。 我收到 nulpointerExcept
我是 android 编程的初学者。执行一种方法时出现此错误。我有这种监听音量变化事件的方法。 public boolean onKeyDown(int keyCode, KeyEvent event
我想使用Listview来显示SQLite数据库中的数据。我使用 Fragment 来获取 ListView 。但现在,我遇到了一个问题: This is the Log info: E/Androi
我正在尝试从 Sqlite 数据库中检索一些数据。但是当我尝试使用 getTaskSent 方法检索数据时,出现以下错误。谁能建议我解决以下错误? E/AndroidRuntime(23159):
我正在开发需要使用 sqlite 从表中获取数据并在 ListView 中显示特定项目的 android 应用程序。当我尝试运行该应用程序时,该应用程序出现错误 getDatabaseLocked 并
我正在尝试在 Sqlite 数据库 中添加当前位置的纬度和经度。但是当我打开我的 Activity 时,它会崩溃并显示 android.database.sqlite.SQLiteOpenHelper
我无法理解我是如何错误地初始化数据库的: java.lang.NullPointerException at android.database.sqlite.SQLiteOpenHel
我是一名优秀的程序员,十分优秀!