Articles of java

运行AspectJ会导致NoSuchMethodError:Aspect.aspectOf

我有一个非常简单的AspectJ方面(使用@AspectJ),只是打印出一条日志消息。 我的目标是在我的Android应用程序通知代码。 现在这个方面工作得很好,只要我的应用程序源代码中有方面类本身。 一旦我将该方面移动到不同的模块(java-> .jar或android lib – > .aar),在运行我的应用程序中的代码时,出现以下运行时exception : java.lang.NoSuchMethodError: com.xxx.xxx.TraceAspect.aspectOf 基本上我的结构是这样的: Root + app (com.android.application) – MainActivity (with annotation to be adviced) + library (android-library) – TraceAspect (aspect definition) 从ajc编译器,我可以看到,ajc编译器拿起我的类,并build议他们正确的,所以我真的不知道为什么它工作,只要我在我的源代码中的@AspectJ类,但一旦我移动停止工作它到一个jar文件。 我正在使用gradle。 Buildscript为我的应用程序是非常简单的。 我遵循http://fernandocejas.com/2014/08/03/aspect-oriented-programming-in-android/中的说明 import com.android.build.gradle.LibraryPlugin import org.aspectj.bridge.IMessage import org.aspectj.bridge.MessageHandler import org.aspectj.tools.ajc.Main buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' classpath 'org.aspectj:aspectjtools:1.8.1' […]

Android编程 – 使URI获得audio位置

我是全新的Java和android编程,所以对我来说有点奇怪! 我主要来自C ++ / C#的背景,所以说技术! 无论如何。 我试图创build一个简单的类来处理我devise的自定义音乐播放器的audio。 我已经处理了所有按键事件,所以现在我正在处理function。 我使用MediaPlayer类来处理大部分困难的事情,但是我对如何访问保存在用户移动设备上的audio有些困惑。 我一直在做一个小小的研究,显然Android设备有一个内置的数据库,pipe理所有的audio位置,并访问这个数据,我必须使用Uri ? 如果有人可以张贴一些如何使用Uri代码示例来访问这个,那么我相当肯定,我将能够build立在此之上,然后将数据添加到任何我想要的容器中。 只是为了说清楚 – 用户不知道音乐位置目录,并且我没有创build原始文件夹,我想要访问软件可以播放的用户设备上的所有音乐。 或者,如果失败了,一个很好的教程…我看过谷歌提供的文档,但没有任何示例代码,所以我不知道从哪里开始! 谢谢大家。

Android(Java)HttpURLConnection在'读取'超时时间进行无声重试

所以我使用Google Volley进行HTTP请求,它基本上使用Java的HttpURLConnection 。 根据我的testing, 问题是这样的 : 当HttpURLConnection上的'read'超时到达时,在连接closures之前执行无提示重试,并抛出相关的exception( SocketTimeoutException )。 请注意 : – 当使用HTTP POST请求时,我注意到了这个错误。 – “读取”超时与“连接”超时不同。 – 如果'read'超时(通过调用connection.setReadTimeout(int)设置)未设置(0),或者设置为比connection.setConnectTimeout(int)更大的值,则不会发生此错误。 – 这个问题已经在这里讨论过了,但是我还没有find任何令人满意的解决scheme。 – 这里可以find一个相关的问题,但我不确定它是否相关(是吗?) 更多的背景 我的应用程序用于付款,所以不要重试请求是至关重要的(是的,我知道它可以由服务器处理,我希望我的客户端是“正确的”无论如何)。 当设置“读取”超时时,如果服务器连接build立,但是服务器在应答之前等待/睡眠/延迟 – 响应(超时)时间(从而引起“读取”exception而不是“连接”exception) ,在引发exception之前发送另一个(静默)请求,导致2个类似的请求,这是不可接受的。 我在寻找什么样的解决scheme? 那么,一个将很好地解决这个问题/错误,就像这里解释的修复(但我再次,我认为这是无关紧要的)。 此外,我想保持原来的stream程,这意味着不要强迫连接closures或类似的东西。 我现在要做的是将'read'超时设置为连接超时的两倍(它们同时开始计数),以确保首先引发“连接”exception。 我也会尝试在服务器端克服这个问题。 问题是,这个“读”超时是有原因的,我目前的实现几乎忽略它,只处理“连接”超时。 编辑 RetryPolicy库的RetryPolicy没有影响这个问题,因为这是一个沉默的重试。 我在图书馆里面看得很深。 logging/断点到处,取消呼叫重试。 那我怎么知道这是一个99.99%的HttpURLConnection问题。

如何以编程方式截取整个活动页面?

即使内容不可见,我如何在Android上截取整个活动的截图? 防爆。 采取完整聊天的截图,然后生成图像文件? 我也要截图隐形区域。 谢谢

将独立对象添加到RealmList

是否有可能添加独立的对象Realm对象Realm对象已经坚持在领域? 那么,我知道这是行不通的,因为我得到NPE( object.row.getIndex():RealmList:94 ) 我想要做的是: mRealm.beginTransaction; contact.getEmails().add(new Email()); mRealm.commitTransaction; 因为在那个特定的时刻,我没有访问一个领域(嗯,我可以使它工作,但我将不得不重写一些结构),例如: //In Activity Contact contact = Realm.where(Contact.class).equalsTo("name","pete").findAll().first(); mRealm.beginTransaction; UpdateHelper.update(contact); mRealm.commitTransaction; //Helper class some else package public static void update(Contact contact) { //do update stuff contact.getEmails().add(new Email()); } `

在Android中与Java的抽象

我正在学习一些关于Java语言的教程。 我在想,如果每次我编码的东西,以及任何types的标准和堆栈,我是否应该抽象? 我已经看到,例如每个Spring服务,我们甚至可以抽象控制器,使用JavaEE堆栈上的EJB接口。 我想知道那是什么目的? 我应该在使用Android SDK进行开发时做同样的事情吗? 我应该抽象每一个我编码的类吗?

匕首2和界面的实现

我有一个简单的Dagger 2testing设置,基于http://konmik.github.io/snorkeling-with-dagger-2.html 。 它注入一个PreferenceLogger,输出所有的偏好。 在注入的类中,我可以@注入更多的类。 public class MainActivity extends Activity { @Inject PreferencesLogger logger; @Inject MainPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { MyApplication.getComponent().inject(this); presenter.doStuff(); logger.log(this); } } public class PreferencesLogger { @Inject OkHttpClient client; @Inject public PreferencesLogger() {} public void log(Contect context) { // this.client is available } } 当我运行这个,logging器被设置,并在PreferencesLogger.log OkHttpClient被正确设置。 所以这个例子按预期工作。 现在我正在尝试获得一个MVP结构。 有一个MainPresenter接口和一个实现。 […]

Android中的静态字段

我在android和java开发新手,我想了解一些事情。 在活动和片段之间使用静态字段传输数据是不好的做法吗? 对我来说,这比在意图中使用临时演员要容易得多。 为什么很多程序在构造函数和方法中使用上下文作为参数,当我们可以使用静态字段对应用程序上下文进行一点访问? 例如: public class ApplicationLoader extends Application { public static volatile Context context; @Override public void onCreate() { super.onCreate(); context = getApplicationContext(); } } 所以有人可以解释,在哪些情况下应该使用android中的静态字段(我的意思是适配器,列表,上下文等类)? 而当使用非静态字段,getters / setters,额外的意图是更好的方式,然后静态字段?

RxJava:找出BehaviorSubject是否是重复的值

我正在制作一个Android界面,显示从networking中获取的一些数据。 我想让它显示最新的可用数据,并永远不会是空的(除非根本没有数据被提取),所以我使用BehaviorSubject为订户(我的用户界面)提供最新的可用信息,同时刷新它更新它的背景。 这是有效的,但由于我的用户界面的另一个要求,我现在必须知道发布的结果是否从networking获得新鲜或不。 (换句话说,我需要知道发布的结果是否为BehaviorSubject的保存项目。) 我怎样才能做到这一点? 如果我需要将它分解为多个Observables,那就好,只要我能够获得BehaviorSubject的caching行为(获取最后的可用结果),同时也能够判断返回的结果是来自caching还是不。 我认为这样做的一个拙劣的方法是检查响应的时间戳是否相对较快,但是这实在是太渺茫了,我宁愿想办法用RxJava来完成。

android片段子类中的getMenuInflater() – 无法parsing方法

我正在尝试在inheritanceFragment类的类中充气菜单。 这是我的OnCreateOptionsMenu()方法 – @Override public boolean OnCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.forecastfragment, menu) ; return true; } 这引发了以下错误: 无法parsing方法'getMenuInflater()' 我试过了 : MenuInflater inflater = getActivity().getMenuInflater(); 但是之后Android Studio突出显示了红色的@Override并指出: 方法不会覆盖超类的方法 我也尝试在同一个类中创build一个getMenuInflater方法,并让它返回new MenuInflater(this) public MenuInflater getMenuInflater() { return new MenuInflater(this); } 但是随后出现以下错误: 错误:不兼容的types:ForecastFragment不能转换为上下文 错误:方法不会覆盖或实现超types的方法 我该怎么办?