我正在尝试通过仅创建一个实例并将其通过流上的方法通过它们的实例来重用Observer
for Single
和Observable
stream :DisposableSingleObserver/DisposableObserver
subscribeWith()
public class SomeClass {
private DisposableSingleObserver<Object> observer;
public SomeClass() {
observer = new DisposableSingleObserver<Object>() {
@Override
public void onSuccess(Object object) {
...
}
@Override
public void onError(Throwable throwable) {
...
}
};
}
public void doSomeStuff() {
singleStream.subscribeOn(...)
.observeOn(...)
.subscribeWith(observer);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致ProtocolViolationException
当我尝试通过消息多次订阅单个观察者实例时:
io.reactivex.exceptions.ProtocolViolationException:不允许多次使用com.package.name.SomeClass $ 1进行订阅。请创建com.package.name.SomeClass $ 1的新实例,然后将其订阅到目标源。
因此,我对代码进行了如下修改:
public class SomeClass {
...
public void doSomeStuff() {
if (observer != null) {
observer.dispose();
}
singleStream.subscribeOn(...)
.observerOn(...)
.subscribeWith(observer); …
Run Code Online (Sandbox Code Playgroud) 我在我的日历实例上设置时间如下
private Calendar mCalendar = Calendar.getInstance();
public void onTimeSet(int hourOfDay, int minute, int second) {
int year = mCalendar.get(Calendar.YEAR);
int monthOfYear = mCalendar.get(Calendar.MONTH);
int dayOfMonth = mCalendar.get(Calendar.DAY_OF_MONTH);
Calendar lCalendar = Calendar.getInstance();
lCalendar.set(year, monthOfYear, dayOfMonth, hourOfDay, minute);
Date lDate = lCalendar.getTime();
if (lDate.before(new Date())) {
return;
} else {
mCalendar.set(year, monthOfYear, dayOfMonth, hourOfDay, minute);
setItemTime();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在Calendar lCalendar和mCalendar 的两个实例上调用getTime()时,我得到了实例化 Calendar 的时间,而不是从日历实例上设置的和参数。此外,如果我在任一实例上再次调用方法,我都会得到正确的时间。hourOfDay
minute
getTime()
为什么会发生这种情况,我该如何解决?
我正在我的应用程序中撰写一条推文,然后启动 Twitter 应用程序以在用户的个人资料上创建该推文。以下是编写 Tweet 和启动 Twitter 应用程序的代码
TweetComposer.Builder builder = new TweetComposer.Builder(this).text(tweetText);
Intent intent = builder.createIntent();
startActivityForResult(intent, TWEET_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
然后我通过以下代码阅读推文是否成功创建:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode = TWEET_REQUEST_CODE && resultCode == RESULT_OK) {
//do some operation
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我得到resultCode = RESULT_CANCELED
的onActivityResult
,而不是RESULT_OK
不顾鸣叫在Twitter的应用程序成功创建并出现在用户的时间线,因此这个问题为什么我会得到结果取消了,而不是RESULT_OK?我尝试通过检入data
对象来查找错误原因,onActivityResult
但它也为空。有没有其他方法可以找到有关应用程序发送原因的更多信息RESULT_CANCELED
?
另外,我没有在我的应用程序中处理用户登录,而是让 Twitter 应用程序为我处理。以下是 Fabric 的设置代码:
TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
Fabric.with(this, new Twitter(authConfig), new TweetComposer());
Run Code Online (Sandbox Code Playgroud)
Twitter SDK …
我正在通过阅读官方文档来学习数据绑定。除了双向绑定中可能存在的无限循环之外,一切都是有意义的。根据双向绑定的官方文档:
使用双向数据绑定时请注意不要引入无限循环。当用户更改属性时,将调用使用 @InverseBindingAdapter 注释的方法,并将值分配给支持属性。反过来,这将调用使用@BindingAdapter注释的方法,这将触发对使用@InverseBindingAdapter注释的方法的另一个调用,依此类推。
我理解声明的第一部分,@InverseBindingAdapter
如果属性发生更改并且新值分配给支持属性,则将调用注释方法。
但我不明白的是,为什么 在这个过程中@InverseBindingAdapter
调用method时又@BindingAdapter
调用method,以及如何导致无限循环?
我正在尝试在我的机器上本地使用 Jenkins 测试和构建我的 Android 应用程序。我在 Linux 上,通过运行以下命令通过 docker 启动 Jenkins:
docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins
Run Code Online (Sandbox Code Playgroud)
然后我打开浏览器并从localhost:8080
. 初始设置后,我通过以下步骤添加了环境变量:
ANDROID_SDK_ROOT
添加环境变量ANDROID_HOME
基本上遵循这个答案的步骤:/sf/answers/2046210631/
我还在我的文件中添加了相同的环境变量~/.zshrc
:
export ANDROID_SDK_ROOT=/home/harry/Android/Sdk/
export ANDROID_HOME=/home/harry/Android/Sdk/
Run Code Online (Sandbox Code Playgroud)
我Use Gradle Wrapper
在项目配置的“构建”部分中使用以下命令:
clean
testDebugUnitTes
assembleDebugBuild
Run Code Online (Sandbox Code Playgroud)
完成所有这些步骤后,我的构建仍然失败并显示消息:
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':app'.
> SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable …
Run Code Online (Sandbox Code Playgroud) continuous-integration android continuous-deployment jenkins docker
我在 Android Studio 项目的 Java 库模块中使用 Dagger,该build.gradle
模块的外观如下:
apply plugin: 'java-library'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.dagger:dagger:2.24'
annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
}
sourceCompatibility = "7"
targetCompatibility = "7"
Run Code Online (Sandbox Code Playgroud)
我可以看到 Dagger 正在正确生成实现,并且它们存在于build/generated/sources/annotationProcessor
但由于某种原因我无法在代码中访问它们。package
此外,生成的文件在语句中显示错误:
包名称“com.example.javamodule”与文件路径“java.main.com.example.javamodule”不对应
我在这里有两个问题。首先,如何在 java 模块代码中访问 Dagger 生成的类,其次,如何从生成的类中删除上述错误?