RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-288062

Sergei Buvaka's questions

Martin Hope
Sergei Buvaka
Asked: 2021-11-08 02:57:48 +0000 UTC

房间:@Embedded 与 @TypeConverters

  • 1

如果我们在 Room 中有 @Entity,其中有复杂的对象作为字段,我们可以使用 2 种方法:

  • @Embedded - 据我了解,如果您使用此注释标记字段,则 Room 会将对象内部的所有字段保存为实体本身的字段,然后正确提取所有内容。

  • @TypeConverters - 在这里我们编写自己的转换器,在大多数情况下归结为将对象通常解析为 Json 字符串。

其实问题是:

根本区别是什么?为什么不到处写@Embedded 并担心各种转换器呢?何时编写自己的转换器更好,何时使用@Embedded 更好,这些方法的优缺点是什么?

java
  • 2 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-08-27 15:18:30 +0000 UTC

通过存储访问框架获取数据和通过 Intent.ACTION_GET_CONTENT 获取内容之间的区别

  • 3

使用存储访问框架访问设备上的文件的根本区别是什么:

val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "image/*"
startActivityForResult(intent, READ_REQUEST_CODE)

并使用此代码:

val intent = Intent()
intent.type = "image/*"
intent.action = Intent.ACTION_GET_CONTENT
startActivityForResult(Intent.createChooser(intent, "Select Picture"), READ_REQUEST_CODE)}

我尝试了这两种方法,视觉结果是一样的。我真的很想了解为什么第一种方法比第二种方法好。

android
  • 2 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-08-07 14:38:16 +0000 UTC

FragmentContainerView 与 FrameLayout

  • 4

从 2019 年开始, Google 建议更换片段<fragment>容器,例如.<FrameLayout>FragmentContainerView

有人可以向我解释这些容器之间的根本区别是什么吗?FragmentContainerView真正更好的是什么?

android
  • 2 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-08-01 01:16:51 +0000 UTC

RX Java 测试中的单元测试无法理解的结果

  • 0

有这样一个测试。

@Test
fun needShowOnboarding() {
    val cards = listOf(
        mockCard(cardUcid = "1", pinSet = false),
        mockCard(cardUcid = "2", pinSet = true),
        mockCard(cardUcid = "3", pinSet = true)
    )
    val account = mockBankAccount(cards)

    val testObserver = pinSetCardCheker.getOnboardingShowingMode(listOf(account)).test()

    with(testObserver) {
        assertNoErrors()
        assertValueCount(1)
        assertResult(PinSetOnboardingShowingMode.Single("1"))
    }
}

其实这样的对象应该是返回PinSetOnboardingShowingMode.Single("1")了才返回的,只是测试不断地crash,报错:

java.lang.AssertionError: Values at position 0 differ; expected: ...PinSetOnboardingShowingMode$Single@5ec77191 (class: Single) but was: ...PinSetOnboardingShowingMode$Single@4642b71d (class: Single) (latch = 0, values = 1, errors = 0, completions = 1)
Expected :...PinSetOnboardingShowingMode$Single@5ec77191 (class: Single) 
Actual   :...PinSetOnboardingShowingMode$Single@4642b71d (class: Single) (latch = 0, values = 1, errors = 0, completions = 1)

如果我们打开比较对象之间的差异,我们会看到以下内容:

  • ...PinSetOnboardingShowingMode$Single@5ec77191 (class: Single)
  • ...PinSetOnboardingShowingMode$Single@4642b71d (class: Single) (latch = 0, values = 1, errors = 0, completions = 1)

这对我来说仍然是一个谜,它在结果对象中的位置:

“(闩锁= 0,值= 1,错误= 0,完成= 1)”。

这是PinSetOnboardingShowingMode类本身:

sealed class PinSetOnboardingShowingMode {
    object None : PinSetOnboardingShowingMode()
    class Single(val cardUcid: String) : PinSetOnboardingShowingMode()
    class List(val cardUcidsWithoutPin: ArrayList<String>) : PinSetOnboardingShowingMode()
}

只要getOnboardingShowingMode返回相同的方法 ( ) boolean,PinSetOnboardingShowingMode测试就成功了。

android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-07-31 02:13:25 +0000 UTC

XML 标记中的元素排列

  • 2

有这样的布局:

在此处输入图像描述

有3个TextView:

  • “我的分数”
  • “*1801”
  • “已安装”

我需要“*1801”和“已安装”始终以全尺寸显示,但如果我们有一个较长的“我的帐户”并且它不适合屏幕,那么它就会被应用elipsize。同时,非常重要的是“我的账户”和“*1801”要紧挨着,就好像它是一个一样TextView。

问题是我无法弄清楚如何正确设置元素的标记。如果有人可以提供建议,我将不胜感激。

android
  • 2 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-07-02 05:10:23 +0000 UTC

LayoutManage: getDecoratedMeasuredHeight(view) 总是返回 0

  • 1

我正在写 custom LayoutManager。有这样的方法

override fun onLayoutChildren(recycler: RecyclerView.Recycler, state: RecyclerView.State) {
        detachAndScrapAttachedViews(recycler)
        fillRecycler(state, recycler)
    }

private fun fillRecycler(
        state: RecyclerView.State,
        recycler: RecyclerView.Recycler
    ) {
        for (position in 0 until state.itemCount) {
            val spanInfo = spanProvider.getSpanOnPosition(position)
            val coordinates = matrix.add(Matrix.Point(spanInfo.column, spanInfo.row))

            val view: View = recycler.getViewForPosition(position)

            val cellWidth = (width - paddingStart - paddingEnd) / spanCount
            val cellHeight = if (isSquareCell) cellWidth
                             else getDecoratedMeasuredHeight(view) //todo вот здесь всегда 0

            val top = paddingTop + cellHeight * coordinates.top
            val bottom = paddingBottom + cellHeight * coordinates.bottom
            val left = paddingLeft + cellWidth * coordinates.left
            val right = paddingRight + cellWidth * coordinates.right

            measureChildWithDecorationsAndMargin(view, right - left, bottom - top)

            addView(view, position)
            layoutDecorated(view, left, top, right, bottom)
            checkLowestView(view, bottom, right)
        }
    }

问题是 getDecoratedMeasuredHeight(view) 方法总是返回 0。我尝试自己打开它View并从那里获取LayoutParams高度 0。它getDecoratedMeasuredWidth(view)返回正确的值。

这是布局本身:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/spanItem"
    android:padding="16dp"
    android:layout_gravity="center"
    android:layout_width="200dp"
    android:layout_height="200dp">

    <TextView
        android:background="@android:color/transparent"
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:textSize="22sp"
        tools:text="Test" />
</FrameLayout>

这是方法generateDefaultLayoutParams():

override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams =
        RecyclerView.LayoutParams(
            RecyclerView.LayoutParams.WRAP_CONTENT,
            RecyclerView.LayoutParams.WRAP_CONTENT
        )

以下是测量儿童的两种方法View:

private fun measureChildWithDecorationsAndMargin(
        child: View,
        cellWidth: Int,
        cellHeight: Int
    ) {
        var widthSpec = View.MeasureSpec.makeMeasureSpec(cellWidth, View.MeasureSpec.EXACTLY)
        var heightSpec = View.MeasureSpec.makeMeasureSpec(cellHeight, View.MeasureSpec.EXACTLY)

        val decorRect = Rect()
        calculateItemDecorationsForChild(child, decorRect)
        val params = child.layoutParams as RecyclerView.LayoutParams
        widthSpec = updateSpecWithExtra(
            widthSpec, params.leftMargin + decorRect.left,
            params.rightMargin + decorRect.right
        )
        heightSpec = updateSpecWithExtra(
            heightSpec, params.topMargin + decorRect.top,
            params.bottomMargin + decorRect.bottom
        )
        child.measure(widthSpec, heightSpec)
    }

    private fun updateSpecWithExtra(spec: Int, startInset: Int, endInset: Int): Int {
        if (startInset == 0 && endInset == 0) return spec

        val mode = View.MeasureSpec.getMode(spec)
        return if (mode == View.MeasureSpec.AT_MOST || mode == View.MeasureSpec.EXACTLY) {
            View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(spec) - startInset - endInset, mode)
        } else spec
    }

如果有人告诉我为什么会发生这种情况以及如何解决它,我会很高兴。

android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-06-18 23:16:54 +0000 UTC

RecyclerView 卡片大小 3/4 屏幕

  • 1

是RecyclerView其中有一个垂直的卡片列表。问题是,是否有可能以某种方式将它们的大小设置为屏幕高度的 3/4(75%)?

如果您将尺寸设置为它们,dp那么屏幕将不会自适应,在一部手机上它将占据整个屏幕,而在另一半。我知道您可以编写自己的 LayoutManager,但这不是一项简单的任务,但我想要一种正常的解决方案,同时不要编写代码的画布。

如果有人对如何做到这一点有任何想法,我很乐意。

升级版:

按照惯例,我们所有的卡片都应该占据这个屏幕尺寸。在底部,下一张卡片应该向外窥视。

在此处输入图像描述

android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-06-15 21:03:14 +0000 UTC

如何更改 AppCompatRadioButton 状态的颜色

  • 1

有这样一个 RadioButton:

<androidx.appcompat.widget.AppCompatRadioButton
                android:id="@+id/leftRadioButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/radio_group_stroke_color"
                android:layout_marginStart="4dp"
                android:layout_marginTop="4dp"
                android:duplicateParentState="true" />

我需要更改RadioButton. 我知道可以这样做:

android:buttonTint="@color/common_blue"

但这就是它的颜色完全改变的方式,我只需要它在某种状态下改变。我试过这个选项:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/background_engaging" android:state_checked="true" />
    <item android:color="@color/transparent" android:state_checked="false" />
</selector>

但在这种情况下,它的背景发生了变化。但我需要图标本身图标

android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-06-13 17:55:27 +0000 UTC

在 View 类中使用 forceLayout()、requestLayout() 和 invalidate()

  • 0

有人可以向我解释这些方法是如何工作的吗?你应该什么时候使用每个?它们之间的主要区别是什么?

android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-06-11 19:04:29 +0000 UTC

Kotlin:apply{} 和 with() 之间的区别

  • 2

有人可以向我解释这两个功能有什么区别吗?在什么情况下应用这个或那个功能更好?

kotlin
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-06-06 22:06:30 +0000 UTC

正确构造辅助 Kotlin 构造函数

  • 0

有这么一堂课。问题在于该字段popEnter并且popExit是可变的。在我看来,可以使它们不可变,但是在调用第一个构造函数的情况下,它们被分配了 null,而在第二个的情况下,我需要的值。如果它是真实的,如何正确地做到这一点?

class NavAnimation(
    @AnimatorRes @AnimRes val enter: Int,
    @AnimatorRes @AnimRes val exit: Int
) {

    var popEnter: Int? = null
        private set
    var popExit: Int? = null
        private set

    constructor(
        @AnimatorRes @AnimRes enter: Int,
        @AnimatorRes @AnimRes exit: Int,
        @AnimatorRes @AnimRes popEnter: Int,
        @AnimatorRes @AnimRes popExit: Int
    ) : this(enter, exit) {
        this.popEnter = popEnter
        this.popExit = popExit
    }
}
kotlin
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-03-24 15:32:28 +0000 UTC

Android Studio:任务“:buildSrc:compileGroovy”执行失败

  • 1

我正在尝试将项目推送到 git,但出现此错误

Execution failed for task ':buildSrc:compileGroovy'.

> BUG! exception in phase 'semantic analysis' in source unit  Unsupported class file major version 57

有什么想法可以解决这个问题吗?

android-studio
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-03-23 15:30:08 +0000 UTC

按参数列表过滤数据

  • 0

有一个包含一些对象的集合。假设他们每个人都有一个 id。还有一个包含一些 id 的列表。

需要根据列表id从对象列表中选择对象。我知道如何在 Java 中以简单的方式做到这一点。我将不得不循环遍历对象数组的次数与 id 列表中的元素一样多,然后从中进行选择。但在我看来,Kotlin 有一个更优雅的解决方案。如果有人可以提供建议,我将不胜感激。

kotlin
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-03-15 17:12:09 +0000 UTC

如何在 UI 测试中检查当前活动

  • 0

对于我使用 Espresso 和 Barista 的测试,我有一个测试,我需要在单击按钮时打开另一个屏幕。如何检查此屏幕是否已打开?我要打开的屏幕有吗?

有没有办法检查屏幕链?要了解屏幕按我需要的顺序打开?

如果有人发送有关 Android 中 UI 测试的优秀教程的链接,我将不胜感激。

android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-04-29 10:59:26 +0000 UTC

Dagger 2. 如何正确添加依赖

  • 2

我刚开始学习 Dagger 2 并且有一些我找不到答案的问题。1.匕首是否负责破坏链接。也就是说,我有这个代码

private MODEL view;
    @Inject
    protected Model mModel;
    @Inject
    protected CompositeDisposable mCompositeDisposable;

    @Override
    public void attachView(MODEL view) {
        this.view = view;
        BasePresenterComponent component = DaggerBasePresenterComponent.builder()
                .basePresenterModule(new BasePresenterModule())
                .build();
        mModel = component.getModel();
        mCompositeDisposable = component.getCompositeDisposable();
    }

在使用匕首之前,我破坏了 detachView 方法中的一些链接

@Override
    public void detachView() {
        view = null;
        mModel = null;
        if (mCompositeDisposable != null && !mCompositeDisposable.isDisposed()) {
            mCompositeDisposable.dispose();
        }
    }

如果正确指定 Scope,使用匕首时是否有必要这样做?

  1. 这是相同的代码示例

    公共类 MainActivity 扩展 AppCompatActivity 实现 IOnFragmentInteractionListener {

    RequestFragment mRequestFragment;
    OrderFragment mOrderFragment;
    FragmentTransaction mTransaction;
    
    //some code
    
    private void startFragment(Fragment fragment) {
        **mTransaction = getSupportFragmentManager().beginTransaction();**
        mTransaction.replace(R.id.fragment_container, fragment);
        mTransaction.commit();
    }
    

    }

那么,像 FragmentTransaction 这样的依赖项应该被移到 Dagger 模块中还是应该留在活动中?我写了这个方法,但我不确定它是否正确:

@Module
public class MainActivityModule {

    //some code

    @Provides
    public FragmentTransaction transaction(AppCompatActivity activity) {
        return activity.getSupportFragmentManager().beginTransaction();
    }
}

好吧,如果有人在MVP中抛出几篇关于Dagger架构的文章,我特别想在GitHub上看到一些代码,我会很高兴疯了=)祝大家好运。

android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-04-18 11:38:24 +0000 UTC

RX Java 结合两个 Observables

  • 0

有这样的代码。

在这里,我们获取手机的位置并在地图上显示给用户。

Single<Task<Location>> taskSingle = Single.create(singleSubscriber -> mMapHandler.getCurrentLocation(activity));

        Disposable getCurrentLocationDisposable = taskSingle
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(locationTask -> locationTask.addOnSuccessListener(this::updateMap));

而这里我们必须获取用户所在城市的名称,并通过该字符串通过城市名称查询天气。

        Disposable getWeatherDisposable = mModel.getWeatherData(city)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(this::updateUi,
                        this::handleError);

我不知道该怎么做。如何从第一个 Observable 获取数据,并根据这些数据启动第二个 Observable。

我试过这样,但有一个问题

Disposable disposable = taskSingle
                .flatMap(new Function<Task<Location>, SingleSource<? extends WeatherData>>() {
                    @Override
                    public SingleSource<? extends WeatherData> apply(Task<Location> locationTask) throws Exception {
                        locationTask.addOnSuccessListener(location -> {
                            updateMap(location);
                            String single = getCurrentLocationCity(activity, location);
                        });
                        return //вот тут я не знаю как вернуть значение;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe();

我如何将结果进一步向下传递

android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-03-25 11:05:37 +0000 UTC

如何在 RX Java 中实现方法

  • 1

我最近刚开始学习 RX Java,我想了解如何在 RX 中重写此方法,是否可能?

@Override
    public void loadExamples(String language) {
        showProgress();
        mDatabase.collection(COLLECTION_PATH)
                .get()
                .addOnCompleteListener(task -> {
                    if (task.isSuccessful()) {
                        List<Example> exampleList = new ArrayList<>();
                        for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
                            Example example = document.toObject(Example.class);
                            if (example.getLanguage().equals(language)) {
                                exampleList.add(example);
                            }
                        }
                        updateUi(exampleList);
                    } else {
                        handleError(task.getException());
                    }
                });
    }
android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-03-25 10:18:43 +0000 UTC

如果空变量适合我,如何处理 NPE?

  • 1
@Override
    public void loadUserData() {
        getView().updateUserInfo(
                mCurrentUser.getPhotoUrl().toString(), //здесь иногда прилетает null
                mCurrentUser.getDisplayName(),
                mCurrentUser.getEmail());
    }

有这样的方法!在其中,当我获得一张照片的链接时,它可以为空!一般来说,这个选项适合我,我只是用另一种方法检查这个链接是否为空,如果它仍然为空,那么我根本不加载图像。但是我的应用程序崩溃了,我不知道如何解决这个问题。

android
  • 1 个回答
  • 10 Views
Martin Hope
Sergei Buvaka
Asked: 2020-03-23 23:51:37 +0000 UTC

如何等待方法执行

  • 1

我有一个方法

public String getProfileUrl() {
        for (UserInfo profile : sCurrentUser.getProviderData()) {
            String provider = profile.getProviderId();

            if (provider.equals("facebook.com")) {
                getFacebookAvatarPhoto();
            } else {
                mProfileUrl = sCurrentUser.getPhotoUrl().toString();
            }
        }
        return mProfileUrl;
    }

getFacebookAvatarPhoto 方法在单独的线程上运行。我怎样才能等待这个方法完成,然后才返回值?

 private void getFacebookAvatarPhoto() {
            Bundle params = new Bundle();
            params.putString("fields", "id,email,gender,cover,picture.type(large)");
            new GraphRequest(AccessToken.getCurrentAccessToken(), "me", params, HttpMethod.GET,
                    response -> {
                        if (response != null) {
                            try {
                                JSONObject data = response.getJSONObject();
                                if (data.has("picture")) {
                                    mProfileUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }).executeAsync();

        }
android
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5