3
我遇到了我的數據庫問題。應用程序發送用戶寫的鏈接,並作爲迴應得到鏈接的簡短形式(工作正常)。在我的數據庫中,我需要把這兩個版本的鏈接 - 完整的,簡短的一個,在這裏我們有一個問題。我得到這樣的錯誤:dbhelper,ORMLite和碎片問題
java.lang.IllegalStateException: Could not construct instance of helper class class pl.bartos.task.DatabaseHelper
at com.j256.ormlite.android.apptools.OpenHelperManager.constructHelper(OpenHelperManager.java:222)
at com.j256.ormlite.android.apptools.OpenHelperManager.loadHelper(OpenHelperManager.java:170)
at com.j256.ormlite.android.apptools.OpenHelperManager.getHelper(OpenHelperManager.java:78)
at pl.bartos.task.Fragments2.getHelper(Fragments2.java:35)
at pl.bartos.task.Fragments2.onCreateView(Fragments2.java:56)
這是我的第一個ORMLite應用程序,所以我有點困惑。
這裏是我的fragments2.class:
public class Fragments2 extends SherlockFragment {
private ListView linkListView;
private Dao<Link, Integer> linkDao;
private List<Link> linkList = new ArrayList();
private DatabaseHelper getHelper() {
if (databaseHelper == null) {
databaseHelper = OpenHelperManager.getHelper(getActivity(), DatabaseHelper.class);
}
return databaseHelper;
}
private DatabaseHelper databaseHelper = null;
public Fragments2() {
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment2, container, false);
linkListView = (ListView) rootView.findViewById(R.id.link_lv);
try {
linkDao = getHelper().getLinkDao();
linkList = linkDao.queryForAll();
final View rowView = inflater.inflate(R.layout.link_item, linkListView, false);
linkListView.addHeaderView(rowView);
linkListView.setAdapter(new LinkAdapter(getActivity(), R.layout.link_item, linkList, linkDao));
populateNoRecordMsg();
} catch (SQLException e) {
e.printStackTrace();
}
return rootView;
}
private void populateNoRecordMsg()
{
// If, no record found in the database, appropriate message needs to be displayed.
if(linkList.size() == 0)
{
final TextView tv = new TextView(getActivity());
tv.setPadding(5, 5, 5, 5);
tv.setTextSize(15);
tv.setText("No Record Found !!");
linkListView.addFooterView(tv);
}
}
@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class
.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (databaseHelper != null) {
OpenHelperManager.releaseHelper();
databaseHelper = null;
}
}
}
這裏是我的DatabaseHelper類
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "link.db";
private static final int DATABASE_VERSION = 1;
private Dao<Link, Integer> linkDao;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
}
@Override
public void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Link.class);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(), "Unable to create database", e);
}
}
@Override
public void onUpgrade(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource, int oldVer, int newVer) {
try {
// In case of change in database of next version of application, please increase the value of DATABASE_VERSION variable, then this method will be invoked
//automatically. Developer needs to handle the upgrade logic here, i.e. create a new table or a new column to an existing table, take the backups of the
// existing database etc.
TableUtils.dropTable(connectionSource, Link.class, true);
onCreate(sqliteDatabase, connectionSource);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(), "Unable to upgrade database from version " + oldVer + " to new "
+ newVer, e);
}
}
public Dao<Link, Integer> getLinkDao() throws SQLException {
if (linkDao == null) {
linkDao = getDao(Link.class);
}
return linkDao;
}
}
這是我的適配器
public class LinkAdapter extends ArrayAdapter<String> {
private LayoutInflater inflater;
private List records;
private Dao<Link, Integer> linkDao;
private Context context;
public LinkAdapter(Context context, int resource, List objects, Dao<Link, Integer> linkDao) {
super(context, resource, objects);
this.records = objects;
this.linkDao = linkDao;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)
convertView = inflater.inflate(R.layout.link_item, parent, false);
if(records.get(position).getClass().isInstance(new Link())){
final Link link = (Link) records.get(position);
((TextView)convertView.findViewById(R.id.entered_tv)).setText(link.getLongLink());
((TextView)convertView.findViewById(R.id.short_tv)).setText(link.getShortLink());
}
return convertView;
}
}
請幫助:/
'main'沒有得到我的應用程序被調用。爲什麼? –
你是什麼意思'重新制作ormlite-config.txt固定問題?我的應用程序中有同樣的課程。 –
只需從DatabaseConfigUtil運行主函數...它會使新的ormlite-config.txt :) –