在转移到Android Annotations v.2.7后,我在eclipse中构建项目时遇到了问题,同时maven构建还可以.这是来自eclipse错误日志的堆栈跟踪:
Error
Mon Nov 05 15:49:49 GMT+02:00 2012
Errors running builder 'Java Builder' on project 'heroes'.
java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:653)
at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:460)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286)
at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
at java.lang.Class.initAnnotationsIfNecessary(Class.java:3070)
at java.lang.Class.getAnnotation(Class.java:3029)
at javax.annotation.processing.AbstractProcessor.getSupportedSourceVersion(AbstractProcessor.java:103)
at org.eclipse.jdt.internal.compiler.apt.dispatch.ProcessorInfo.<init>(ProcessorInfo.java:56)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.discoverNextProcessor(IdeAnnotationProcessorManager.java:94)
at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:116)
at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:134)
at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:820)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:434)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:178)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:60)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:178)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) …Run Code Online (Sandbox Code Playgroud) 我得到的错误是"java.lang.IllegalArgumentException:class com.activeandroid.DatabaseHelper声明了多个名为mContext的JSON字段"
我正在使用AndroidAnnotations RestClient从我的Web服务中提取数据并序列化为POJO.使用ORMLite时序列化工作正常,但我最近决定试用Active Android,现在我的类扩展了Model.Gson正在序列化我无法控制的父类.无论如何,我只能包含某些字段,或者只是从RestClient返回普通的JSON,并以不同的方式进行序列化
@Rest(rootUrl = "http://stuff...com", converters = { GsonHttpMessageConverter.class })
public interface RestClient {
@Get("/AndroidController/createFacebookUser?facebookToken={facebookToken}&catIds= {catIds}")
User createFacebookUser(String facebookToken,String catIds);
}
Run Code Online (Sandbox Code Playgroud)
用户模型是
@Data
@Table(name = "Users")
public class User extends Model {
@Column(name = "SystemID")
private String systemID;
@Column(name = "Name")
private String name;
public List<GameEntry> items() {
return getMany(GameEntry.class, "Category");
}
public User(){}
Run Code Online (Sandbox Code Playgroud)
}
我认为IntelliJ在生成R.java文件时存在一些问题,导致AndroidAnnotations出现问题,因为它无法解析布局的资源ID.
这是我的活动:
package com.airlocksoftware.canvastest;
import android.app.Activity;
import android.os.Bundle;
import com.googlecode.androidannotations.annotations.EActivity;
@EActivity(R.layout.main)
public class MyActivity extends Activity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,即使我注释掉注释,并且确实如此setContentView(R.layout.main),即使从未导入R.java,它也能正常工作.
顺便说一句,布局只是一个简单的"Hello World".没有什么奇怪的事情发生在那里.
无论我做什么,我都无法生成AndroidAnnotations CanvasActivity_.java.我的pom.xml看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.airlocksoftware.canvastest</groupId>
<artifactId>CanvasTest</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<android.version>4.2.2_r2</android.version>
<android.platform>17</android.platform>
<androidannotations.version>2.7.1</androidannotations.version>
<java.version>1.6</java.version>
</properties>
<repositories>
<repository>
<id>local-repo</id>
<url>file:///${env.HOME}/.m2/repository</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>android</groupId>
<artifactId>android</artifactId>
<version>${android.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.googlecode.androidannotations</groupId>
<artifactId>androidannotations</artifactId>
<version>${androidannotations.version}</version> …Run Code Online (Sandbox Code Playgroud) 我不确定它是Android Studio(0.1.9)还是AndroidAnnotation问题,但是,最近我无法制作和编译我的AndroidAnnotations项目.
好的,所以我尝试制作项目,这就是我在"消息"窗口中得到的内容:
Information:Round 1:
Information: input files: {com.antyzero.sidereelo.ui.activity.SplashActivity}
Information: annotations: [com.googlecode.androidannotations.annotations.EActivity, java.lang.Override]
Information: last round: false
Information:Processor com.googlecode.androidannotations.AndroidAnnotationProcessor matches [com.googlecode.androidannotations.annotations.EActivity] and returns true.
Information:Note: Starting AndroidAnnotations annotation processing
Information:Round 2:
Information: input files: {com.antyzero.sidereelo.ui.activity.SplashActivity_}
Information: annotations: [java.lang.Override]
Information:Processor com.googlecode.androidannotations.AndroidAnnotationProcessor matches [] and returns true.
Information:Round 3:
Information: input files: {}
Information: annotations: []
Information: last round: true
Information:Compilation completed successfully with 1 warning in 17 sec
Information:0 errors
Information:1 warning
Warning:: Unclosed files for the types '[dummy1372862415557]'; these types …Run Code Online (Sandbox Code Playgroud) 我在使用gradle构建将IntelliJ IDEA项目迁移到Android Studio时遇到问题.我已经设置了AndroidAnnotations库,就像其他各种帖子中推荐的一样,它工作得很好.但是,当多次编译我的项目而不执行:clean其间的任务时,我收到以下错误消息:
/project-dir/build/source/apt_generated/flavor1/release/com/example/app/MyActivity_.java:15: error: duplicate class: com.example.app.MyActivity_
[more errors here...]
Run Code Online (Sandbox Code Playgroud)
我相信系列中的多个构建失败,因为AndroidAnnotations *_.java总是在:compile任务之前重新创建文件(不检查是否有必要)和:compile任务识别新文件(例如使用时间戳)但已经将它们作为预编译*.class文件找到因此抛出错误.这可能吗?我该如何防止这种行为?我可以为AndroidAnnotations添加必要性检查吗?或者这是另一个问题吗?
更新1:似乎从AndroidAnnotations本身抛出错误,因为:compile我删除时会起作用*.javaapt_generated手动文件夹内的文件时工作.
更新2:
我删除了以下一行 build.gradle:
// Automatically add the generated source code to the source set
android.sourceSets[getSourceSetName(variant)].java.srcDirs += aptOutput
Run Code Online (Sandbox Code Playgroud)
我不知道为什么没有这条线就行.由于我没有使用Android Studio添加文件夹Mark Directory as > Sources Root.可能这是缓存的一些结果?或者gradle以某种方式将我生成的java文件自动添加到类路径中?
尽管如此,我还是会感谢任何评论.
更新3 /解决方案
删除行并将gradle构建文件与Android Studio同步后,自动生成的源代码将作为源根删除,从而导致IDE显示缺少类的错误.
最终,我在Android Annotations github问题上找到了解决方案:https://github.com/excilys/androidannotations/issues/676
我重新添加了将其添加到源集的语句(允许Android Studio将其显示为源根).此外,我使用以下方法从变种源集合中删除了文件:
variant.javaCompile.source = variant.javaCompile.source.filter { p ->
return !p.getPath().startsWith(aptOutputDir.getPath())
}
Run Code Online (Sandbox Code Playgroud)
现在识别生成的文件,并且重复的类错误消失了.
最好的问候,大卫 …
android gradle annotation-processing android-annotations android-studio
我有一个Android应用程序(Spring Android + Android Annotations + Gson),它使用来自Web应用程序(Jersey + Spring + Hibernate/JPA)的REST服务.问题是我的java.util.Date属性没有序列化:
活动(Android应用程序):
...
@Click(R.id.buttonLogin)
void onLoginClick() {
Student student = new Student();
student.setDateRegistration(new Date()); //Property where the problem occurs
student.setFirstName("Venilton");
student.setGender(Gender.M);
doSomethingInBackground(student);
}
@Background
void doSomethingInBackground(Student student) {
this.restClient.insert(student);
}
...
Run Code Online (Sandbox Code Playgroud)
休息客户端(Android应用程序):
@Rest(rootUrl = "http://MY_IP:8080/restful-app",
converters = { GsonHttpMessageConverter.class })
public interface StudentRESTfulClient {
@Post("/student/insert")
Student insert(Student student);
}
Run Code Online (Sandbox Code Playgroud)
Rest Server(Web App):
@Component
@Path("/student")
public class StudentRESTfulServer {
@Autowired
private StudentService studentServiceJpa;
@POST
@Path("/insert")
public Student insert(Student student) {
//student.getDateRegistration() …Run Code Online (Sandbox Code Playgroud) 基本上,我今天面临的是以下几点:
看起来很简单,但编码并不容易.
这是我到目前为止的实现:
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
interceptors.add( new NetworkInterceptor() );
tpl.setInterceptors( interceptors );
Run Code Online (Sandbox Code Playgroud)
所以现在,在设置拦截器之后,我想为模板设置自定义超时配置.
所以我做了以下事情:
tpl.getRequestFactory().
如果没有设置拦截器,则返回a InterceptingClientHttpRequestFactory而不是SimpleClientHttpRequestFactory返回.
因此,当它返回该InterceptingClientHttpRequestFactory实例时,我无法设置超时.
您可以查看Spring的源代码,最后一种方法:http://grepcode.com/file_/repo1.maven.org/maven2/org.springframework/spring-web/3.1.1.RELEASE/org/springframework/http/客户机/支撑/ InterceptingHttpAccessor.java /?v =源
所以...任何提示?
我有一个课程,它是从Fragment扩展的。在一个类中,我的editText为null,并且@AfterViews没有调用,这是我的代码:
@EFragment
public class Search extends Fragment {
private final String TAG = Search.class.getCanonicalName();
private static ProgressDialog progressDialog;
private Activity activity;
private ArrayList<String> urlList = new ArrayList<String>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.search, container, false);
Log.i(TAG, "onCreateView");
return rootView;
}
@ViewById
RadioButton firstRadio;
@ViewById
RadioButton secondRadio;
@ViewById(R.id.editText1)
EditText editText1;
@AfterViews
void afterViews() {
int a = 1;
a++;
Log.i(TAG, editText1 + "AfterViews");
Log.i(TAG, a + "aaaaaaaa");
}
private void extractUrlsFromText(String s) { …Run Code Online (Sandbox Code Playgroud) @EActivity(R.layout.data_layout)
public class MyActivity extendsActivity
{
@Bean MyEbean bean;
@AfterViews
public void setupView()
{
bean.loadData("Test name");
}
}
@EBean public class MyEbean
{
@RootContext context;
@ViewById(R.id.name_field)
TextView nameField;
public void loadData(String name)
{
nameField.setText(name);
}
}
Run Code Online (Sandbox Code Playgroud)
loadData()中的"nameField"为null.同时如果我在loadData()内执行此操作
nameField = (TextView)((Activity)context).findViewById(R.id.name_field); it's all good. So the view isdefinitely there. Also if I call this method from a retrofit callback
Run Code Online (Sandbox Code Playgroud)
(即延迟后)"名称"自动填充.
我正在使用Android Annotations 3.3.2
BadgeDrawable我会在我的 Android 应用程序中使用a Button,问题是当我尝试设置按钮布局时,badgeDrawable我attachBadgeDrawable收到一个错误,其中显示:
his declaration is opt-in and its usage should be marked with '@com.google.android.material.badge.ExperimentalBadgeUtils' or '@OptIn(markerClass = com.google.android.material.badge.ExperimentalBadgeUtils.class)'
Run Code Online (Sandbox Code Playgroud)
我使用那段代码的代码如下:
btnInvia.viewTreeObserver.addOnGlobalLayoutListener(
object : OnGlobalLayoutListener {
override fun onGlobalLayout() {
val badgeDrawable = BadgeDrawable.create(requireContext())
badgeDrawable.number = corpo
badgeDrawable.verticalOffset = 20
badgeDrawable.horizontalOffset = 15
BadgeUtils.attachBadgeDrawable(badgeDrawable, btnInvia, layoutInvia)
btnInvia.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
}
)
Run Code Online (Sandbox Code Playgroud)
如果有用的话最小 SDK 是 24。
android kotlin android-annotations material-components-android androidx
android ×10
gson ×2
rest ×2
androidx ×1
gradle ×1
java ×1
kotlin ×1
material-components-android ×1
maven ×1
resttemplate ×1
spring ×1
spring-mvc ×1
xml ×1