如何为 AndroidAnnotations 4.0.0 调整 AndroidAnnotations 3.x 兼容的 ORMLite 代码
How to adjust AndroidAnnotations 3.x compatible ORMLite code for AndroidAnnotations 4.0.0
我正在尝试从 AndroidAnnotations 3.3.2 升级到版本 4.0.0,但在升级后让 ORMLite 工作时遇到问题。
升级到 4.0.0 并构建项目后,我收到错误消息:
"error: cannot find symbol class OrmLiteDao"
而这部分代码用红色标记:
@OrmLiteDao(helper = DatabaseHelper.class)
ContactDao mContactDao;
我的旧 class(es) 与 AndroidAnnotations 3.3.2 完美配合,看起来像这样:
public class ContactService {
private final String TAG = getClass().getSimpleName();
@RootContext
Context ctx;
@OrmLiteDao(helper = DatabaseHelper.class)
ContactDao mContactDao;
public Contact getContact(Integer contactId) throws ItemNotFoundException, SQLException {
Contact contact = mContactDao.queryForId(contactId);
if (contact == null) {
Log.e(TAG, "Contact not found in database");
throw new ItemNotFoundException();
}
return contact;
}
public List<Contact> getContacts() throws ItemNotFoundException, SQLException {
List<Contact> contact = mContactDao.queryForAll();
if (contact == null) {
Log.e(TAG, "Contacts not found in database");
throw new ItemNotFoundException();
}
return contact;
}
public Contact createContact(Contact contact) throws SQLException {
try {
mContactDao.create(contact);
} catch (SQLException e) {
Log.e(TAG, e.getLocalizedMessage());
}
Log.d(TAG, "New Contact ID: " + contact.getId());
return contact;
}
}
而且我的 ContactDao class 相对比较空,因为我的方法都在 ContactService class:
public class ContactDao extends BaseDaoImpl<Contact, Integer> {
public ContactDao(Class<Contact> dataClass) throws SQLException {
super(dataClass);
}
public ContactDao(ConnectionSource connectionSource, Class<Contact> dataClass) throws SQLException {
super(connectionSource, dataClass);
}
public ContactDao(ConnectionSource connectionSource, DatabaseTableConfig<Contact> tableConfig) throws SQLException {
super(connectionSource, tableConfig);
}
public ContactDao(ConnectionSource connectionSource) throws SQLException {
super(connectionSource, Contact.class);
}
}
根据 AndroidAnnotations Wiki (https://github.com/excilys/androidannotations/wiki/Ormlite),我必须将代码更改为:
@EActivity
public class MyActivity extends Activity {
@OrmLiteDao(helper = DatabaseHelper.class)
void setUserDao(UserDao userDao){
// do something with userDao
}
}
我不清楚我必须如何将上面的代码调整为新格式(下面)才能使其与 AndroidAnnotations 4.0.0 一起使用。谁能告诉我如何调整我的代码以使其与 AndroidAnnotations 4.0.0 兼容?
谢谢。
您不必按照您在上一个示例中编写的方式更改代码。在那里,您使用的是方法注入,但这是一种替代方法,字段注入在 AA 4.0.0 中仍然有效。
但是您必须添加更多依赖项,并针对新包名称调整您的导入。
build.gradle:
compile "org.androidannotations:androidannotations-api:4.0.0"
apt "org.androidannotations:androidannotations:4.0.0"
compile "org.androidannotations:ormlite-api:4.0.0"
apt "org.androidannotations:ormlite:4.0.0"
.java 使用 @OrmLiteDao
的文件:
import org.androidannotations.ormlite.annotations.OrmLiteDao;
您可以阅读这些说明 here。
我正在尝试从 AndroidAnnotations 3.3.2 升级到版本 4.0.0,但在升级后让 ORMLite 工作时遇到问题。 升级到 4.0.0 并构建项目后,我收到错误消息: "error: cannot find symbol class OrmLiteDao" 而这部分代码用红色标记:
@OrmLiteDao(helper = DatabaseHelper.class)
ContactDao mContactDao;
我的旧 class(es) 与 AndroidAnnotations 3.3.2 完美配合,看起来像这样:
public class ContactService {
private final String TAG = getClass().getSimpleName();
@RootContext
Context ctx;
@OrmLiteDao(helper = DatabaseHelper.class)
ContactDao mContactDao;
public Contact getContact(Integer contactId) throws ItemNotFoundException, SQLException {
Contact contact = mContactDao.queryForId(contactId);
if (contact == null) {
Log.e(TAG, "Contact not found in database");
throw new ItemNotFoundException();
}
return contact;
}
public List<Contact> getContacts() throws ItemNotFoundException, SQLException {
List<Contact> contact = mContactDao.queryForAll();
if (contact == null) {
Log.e(TAG, "Contacts not found in database");
throw new ItemNotFoundException();
}
return contact;
}
public Contact createContact(Contact contact) throws SQLException {
try {
mContactDao.create(contact);
} catch (SQLException e) {
Log.e(TAG, e.getLocalizedMessage());
}
Log.d(TAG, "New Contact ID: " + contact.getId());
return contact;
}
}
而且我的 ContactDao class 相对比较空,因为我的方法都在 ContactService class:
public class ContactDao extends BaseDaoImpl<Contact, Integer> {
public ContactDao(Class<Contact> dataClass) throws SQLException {
super(dataClass);
}
public ContactDao(ConnectionSource connectionSource, Class<Contact> dataClass) throws SQLException {
super(connectionSource, dataClass);
}
public ContactDao(ConnectionSource connectionSource, DatabaseTableConfig<Contact> tableConfig) throws SQLException {
super(connectionSource, tableConfig);
}
public ContactDao(ConnectionSource connectionSource) throws SQLException {
super(connectionSource, Contact.class);
}
}
根据 AndroidAnnotations Wiki (https://github.com/excilys/androidannotations/wiki/Ormlite),我必须将代码更改为:
@EActivity
public class MyActivity extends Activity {
@OrmLiteDao(helper = DatabaseHelper.class)
void setUserDao(UserDao userDao){
// do something with userDao
}
}
我不清楚我必须如何将上面的代码调整为新格式(下面)才能使其与 AndroidAnnotations 4.0.0 一起使用。谁能告诉我如何调整我的代码以使其与 AndroidAnnotations 4.0.0 兼容?
谢谢。
您不必按照您在上一个示例中编写的方式更改代码。在那里,您使用的是方法注入,但这是一种替代方法,字段注入在 AA 4.0.0 中仍然有效。
但是您必须添加更多依赖项,并针对新包名称调整您的导入。
build.gradle:
compile "org.androidannotations:androidannotations-api:4.0.0"
apt "org.androidannotations:androidannotations:4.0.0"
compile "org.androidannotations:ormlite-api:4.0.0"
apt "org.androidannotations:ormlite:4.0.0"
.java 使用 @OrmLiteDao
的文件:
import org.androidannotations.ormlite.annotations.OrmLiteDao;
您可以阅读这些说明 here。