小编ald*_*dok的帖子

鉴于最终块未正确填充

我正在尝试实现基于密码的加密算法,但是我得到了这个例外:

javax.crypto.BadPaddingException:给定最终块未正确填充

可能是什么问题?(我是Java新手.)

这是我的代码:

public class PasswordCrypter {

    private Key key;

    public PasswordCrypter(String password)  {
        try{
            KeyGenerator generator;
            generator = KeyGenerator.getInstance("DES");
            SecureRandom sec = new SecureRandom(password.getBytes());
            generator.init(sec);
            key = generator.generateKey();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public byte[] encrypt(byte[] array) throws CrypterException {
        try{
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);

            return cipher.doFinal(array);
        } catch (Exception e) { 
            e.printStackTrace();
        }
        return null;
    }

    public byte[] decrypt(byte[] array) throws CrypterException{
        try{
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key);

            return cipher.doFinal(array);
        } …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography exception javax.crypto

102
推荐指数
2
解决办法
24万
查看次数

具有多个订户的单个可观察者

我有一个Observable<<List<Foo>> getFoo()从Retrofit服务创建的,在调用该 .getFoo()方法后,我需要与多个订阅者共享它..share()但是,调用该方法会导致重新执行网络呼叫.重播运算符也不起作用.我知道可能有一个潜在的解决方案.cache(),但我不知道为什么会出现这种行为.

// Create an instance of our GitHub API interface.
Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();

// Create a call instance for looking up Retrofit contributors.
Observable<List<Contributor>> testObservable = retrofit
        .create(GitHub.class)
        .contributors("square", "retrofit")
        .share();

Subscription subscription1 = testObservable
       .subscribe(new Subscriber<List<Contributor>>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(List<Contributor> contributors) {
                System.out.println(contributors);
            }
         });

Subscription subscription2 = testObservable
        .subscribe(new …
Run Code Online (Sandbox Code Playgroud)

android rx-java retrofit

27
推荐指数
2
解决办法
1万
查看次数

如何在Kotlin中实例化对象时覆盖方法?

在Java中,要在实例化新对象时覆盖方法,我们可以这样做

public ActivityTestRule<MainActivity> rule = new ActivityTestRule<MainActivity>(
            MainActivity.class) {
        @Override
        protected void beforeActivityLaunched() {
            // implement code
            super.beforeActivityLaunched();
        }
    };
Run Code Online (Sandbox Code Playgroud)

如何在Kotlin做到这一点?我尝试了这段代码,但无法编译.

@Rule @JvmField
var rule = ActivityTestRule<MainActivity>(MainActivity::class.java) {
    override fun beforeActivityLaunched() {
        super.beforeActivityLaunched()
    }
} 
Run Code Online (Sandbox Code Playgroud)

java android kotlin

22
推荐指数
1
解决办法
7371
查看次数

具有半径的CardView上的共享元素转换

我已经在这个问题上工作了好几个星期,我仍然无法解决这个问题.

所以,我有一个包含带有ImageView的LinearLayout的CardView.

没有半径

没有该半径,Shared Element Transition可以无缝地工作.但是,当我将半径(app:cardCornerRadius ="25dp")添加到该CardView时,共享元素转换看起来很难看,因为它首先删除半径然后开始动画.

半径过渡

第一种方法:ObjectAnimator

我创建了ObjectAnimator来为卡上的半径值设置动画,并在动画结束后开始转换.

ObjectAnimator animator = ObjectAnimator
            .ofFloat(view, "radius", AppUtil.dpAsPixel(this, 25), 0);
animator.setDuration(150);
animator.addListener( // start new Activity with Transition );
animator.start();
Run Code Online (Sandbox Code Playgroud)

这有效,但看起来不太好,因为转换在开始转换之前等待动画完成.我需要的是半径是在转换到新Activity时的动画(类似于TransitionSet中的ORDERING_TOGETHER).

第二种方法 - ChangeImageTransform

我已经阅读了StackOverflow帖子来使用Transformation Class,如ChangeImageTransform和ChangeBounds.

我确实定义了我建议的应用程序主题(my_transition包含ChangeImageTransform transitionSet)

<item name="android:windowSharedElementEnterTransition">@transition/my_transition</item>
<item name="android:windowSharedElementExitTransition">@transition/my_transition</item>
Run Code Online (Sandbox Code Playgroud)

但它不起作用..

第三种方法 - 天真

我的最后一次尝试是强制目标ImageView的半径也是25dp.因为目标ImageView可能是方形的,因此可能我的CardView被转换为方形,但正如您所猜测的那样,它不起作用.

第四种方法 - 不使用CardView

如您所见,我正在使用Penguin图像并使用CardView来制作半径.我可以使用图像转换使图像四舍五入,但我仍然认为这不是创建共享元素转换的正确方法.

这是我的问题,有没有办法使CardView半径的共享元素转换工作而不首先删除半径?

android android-animation android-transitions android-cardview shared-element-transition

11
推荐指数
2
解决办法
4603
查看次数

什么是Kotlin Gradle依赖项中的"实现"?

我正在使用Android Studio 3.0 Preview来启动新的Kotlin项目.当我尝试在build.gradle我看到implementation范围而不是通常时添加依赖项compile.

androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
implementation 'com.android.support:appcompat-v7:25.3.1'
testImplementation 'junit:junit:4.12'
Run Code Online (Sandbox Code Playgroud)

还有androidTestImplementationtestImplementation范围.

最后,我添加compile添加第三方依赖项,它的工作原理.

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
Run Code Online (Sandbox Code Playgroud)

所以我的问题是......

  • 是什么implementation,androidTestImplementationtestImplementation范围是什么?
  • 它比任何不同compile,testCompileandroidTestCompile
  • 我应该在Kotlin项目中使用哪一个?

编辑:我的不好,这个问题不是Kotlin具体的.这是新的Android Gradle Plugin配置.

android gradle kotlin android-gradle-plugin

8
推荐指数
1
解决办法
3668
查看次数

Android API UsageStats getLastTimeUsed 不正确?

我正在尝试使用最近在 Android 中引入的 UsageStatsManager 类读取应用程序上次使用的时间。

但是有一个问题。它为大多数应用程序提供了正确的结果。但是对于某些呼叫应用程序:appUsageStats.get(appInformation.packageName).getLastTimeUsed()它返回一个不正确的 4 位毫秒。

附件是评估窗口的屏幕截图,显示 8738 为真正的呼叫者应用程序。这是一个错误还是我做错了什么?

在此处输入图片说明

注意:作为观察,当mLastTimeSystemUsedmLastTimeUsed. 仅供参考。

下面的代码片段:

Map<String, UsageStats> appUsageStats = UStats.getMapOfAggregatedUsage(MainActivity.this);

if(appUsageStats.get(appInformation.packageName)!=null) {
    long used = appUsageStats.get(appInformation.packageName).getLastTimeUsed();
    long installedDiff2 = new Date().getTime() - new Date(used).getTime();
    long daysGap = TimeUnit.DAYS.convert(installedDiff2, TimeUnit.MILLISECONDS);

    if(daysGap == 0) {
        appInfoObj.setAppUsedDate("Used : Today");
    } else {
        appInfoObj.setAppUsedDate("Used : " + String.valueOf(daysGap) + " days ago");

    }
    appInfoObj.setAppUsedDateNumber(daysGap);
}
Run Code Online (Sandbox Code Playgroud)

UStats 类方法:

public static Map<String, UsageStats> getMapOfAggregatedUsage(Context context) {
    Calendar calendar = Calendar.getInstance();

    long …
Run Code Online (Sandbox Code Playgroud)

android usage-statistics usagestatsmanager

6
推荐指数
0
解决办法
980
查看次数

如何在 Kotlin 中模拟和验证 Lambda 表达式?

在 Kotlin(和 Java 8)中,我们可以使用 Lambda 表达式来移除样板回调接口。例如,

data class Profile(val name: String)

interface ProfileCallback {
  fun onSuccess(profile: Profile)
}

class ProfileRepository(val callback: ProfileCallback) {

  fun getProfile() {
    // do calculation
    callback.onSuccess(Profile("name"))
  }
}
Run Code Online (Sandbox Code Playgroud)

我们可以把removeProfileCallback改成Kotlin的Lambda:

class ProfileRepository(val callback: (Profile) -> Unit) {

  fun getProfile() {
    // do calculation
    callback(Profile("name"))
  }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我不确定如何模拟然后验证该功能。我试过像这样使用 Mockito

@Mock
lateinit var profileCallback: (Profile) -> Unit

@Test
fun test() {
    // this wouldn't work
    Mockito.verify(profileCallback).invoke(any())   
}
Run Code Online (Sandbox Code Playgroud)

但它抛出一个异常:

org.mockito.exceptions.base.MockitoException: ClassCastException 在创建 mockito 模拟时发生:要模拟的类:'kotlin.jvm.functions.Function1',由类加载器加载:'sun.misc.Launcher$AppClassLoader@7852e922'

如何在 Kotlin 中模拟和验证 Lambda …

testing lambda mockito kotlin

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

ViewStub vs View.GONE vs Inflate vs ViewSwitcher

我有一个与懒惰加载视图/布局性能相关的问题.有时我们想要动态显示/隐藏多个视图.在这种情况下,我们有四种选择:

  1. 在.xml中包含所有布局并使用setVisibility方法(如View.GONE和VIEW.VISIBLE)
  2. 使用ViewFlipper/ViewSwitcher
  3. 使用ViewStub
  4. 以编程方式夸大新布局.

哪一个性能最好?我一直在谷歌搜索,发现ViewStub专门为此设计,但我不确定.也许我错了,或者甚至还有第五种选择,我不知道.您对此有不同的看法或经验吗?谢谢!

android android-layout android-view

4
推荐指数
2
解决办法
649
查看次数

给定多个Maven存储库,Gradle将选择哪种依赖性?

在Gradle项目中,我们可以定义多个远程/本地Maven存储库。

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
        jCenter()
        maven { 
            url 'https://example1.mavenrepo.com/public'
        }
        maven {
            url "https://example2.mavenrepo.com/release"
        }
    }

    dependencies {
        classpath 'com.example.mydependencies:mylibrary:1.0.0'
    }
}
Run Code Online (Sandbox Code Playgroud)

如果mylibrary存在于所有Maven回购中。Gradle将选择哪一个?我可以配置Gradle只下载mylibrary某些Maven仓库吗?

android gradle maven build.gradle android-gradle-plugin

2
推荐指数
1
解决办法
391
查看次数

如何创建Button/Switch-Like Tile,你可以踩到它并改变它的价值?

如果玩家在真实时按下Button-Tile,则会变为false.如果玩家在假的时候踩下Button-Tile,那么它就变成了现实.

问题是,当玩家站在(相交)Button-Tile时,它会不断更新条件.所以,从真实来看,它变得虚假.因为它的错误和玩家相交,它再次成为现实.真假真假 - 等等.

我使用ElapsedGameTime使更新过程变慢,玩家有机会将Button更改为true或false.

但是,这不是我想要的解决方案.当玩家站在按钮区块上时,还有其他方法可以使其保持在False/True状态吗?

xna xna-4.0

0
推荐指数
1
解决办法
137
查看次数