小编Har*_*rry的帖子

使用已处置的观察者不会重新订阅源

我正在尝试通过仅创建一个实例并将其通过流上的方法通过它们的实例来重用Observerfor SingleObservablestream :DisposableSingleObserver/DisposableObserversubscribeWith()

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)

java android rx-android rx-java2

7
推荐指数
1
解决办法
974
查看次数

日历 set() 方法没有设置正确的时间

我在我的日历实例上设置时间如下

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 lCalendarmCalendar 的两个实例上调用getTime()时,我得到了实例化 Calendar 的时间,而不是从日历实例上设置的和参数。此外,如果我在任一实例上再次调用方法,我都会得到正确的时间。hourOfDayminutegetTime()

为什么会发生这种情况,我该如何解决?

java

5
推荐指数
1
解决办法
1233
查看次数

Twitter 应用程序在成功创建推文后发送错误的活动结果

我正在我的应用程序中撰写一条推文,然后启动 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_CANCELEDonActivityResult,而不是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 …

twitter android tweets twitter-fabric

5
推荐指数
0
解决办法
422
查看次数

双向数据绑定如何导致无限循环?

我正在通过阅读官方文档来学习数据绑定。除了双向绑定中可能存在的无限循环之外,一切都是有意义的。根据双向绑定的官方文档:

使用双向数据绑定时请注意不要引入无限循环。当用户更改属性时,将调用使用 @InverseBindingAdapter 注释的方法,并将值分配给支持属性。反过来,这将调用使用@BindingAdapter注释的方法,这将触发对使用@InverseBindingAdapter注释的方法的另一个调用,依此类推。

我理解声明的第一部分,@InverseBindingAdapter如果属性发生更改并且新值分配给支持属性,则将调用注释方法。

但我不明白的是,为什么 在这个过程中@InverseBindingAdapter调用method时又@BindingAdapter调用method,以及如何导致无限循环?

android android-databinding two-way-binding

5
推荐指数
1
解决办法
1416
查看次数

找不到 Android SDK 位置

我正在尝试在我的机器上本地使用 Jenkins 测试和构建我的 Android 应用程序。我在 Linux 上,通过运行以下命令通过 docker 启动 Jenkins:

docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins
Run Code Online (Sandbox Code Playgroud)

然后我打开浏览器并从localhost:8080. 初始设置后,我通过以下步骤添加了环境变量:

  1. 转到管理 Jenkins
  2. 配置系统
  3. 转到全局属性
  4. 检查环境变量
  5. 在那里ANDROID_SDK_ROOT添加环境变量ANDROID_HOME
  6. 单击应用并保存

这是我机器上 Jenkins 的样子: 在此输入图像描述

基本上遵循这个答案的步骤:/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

5
推荐指数
1
解决办法
1800
查看次数

如何在Android Studio的Java库模块中使用Dagger?

我在 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 生成的类,其次,如何从生成的类中删除上述错误?

java android dependency-injection generated-code dagger-2

4
推荐指数
1
解决办法
1129
查看次数