小编j2e*_*nue的帖子

Android -room持久库 - DAO调用是异步的,因此如何获得回调?

从我所读的内容Room不允许您在主线程上发出数据库查询(因为可能导致主线程的延迟)). 所以想象一下,我正在尝试更新UI主线程上的textview哪些数据如何才能收到回调.让我举个例子.想象一下,我想将我的业务模型数据存储到一个名为Events的对象中.因此我们有一个EventDao对象:

想象我们在下面有这个DAO对象:

@Dao
public interface EventDao {

   @Query("SELECT * FROM " + Event.TABLE_NAME + " WHERE " + Event.DATE_FIELD + " > :minDate" limit 1)
   LiveData<List<Event>> getEvent(LocalDateTime minDate);

   @Insert(onConflict = REPLACE)
   void addEvent(Event event);

   @Delete
   void deleteEvent(Event event);

   @Update(onConflict = REPLACE)
   void updateEvent(Event event);

}
Run Code Online (Sandbox Code Playgroud)

现在在一些活动中,我有一个textview,我想更新它的值,所以我这样做:

 myTextView.setText(EventDao.getEvent(someDate));/*i think this is illegal as im trying to call room dao on mainthread, therefore how is this done correctly ? would i need to show a spinner while it updates ?*/ …
Run Code Online (Sandbox Code Playgroud)

android android-room

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

intelliji或android studio - 创建方法测试用例的捷径

在intelliji中快速创建测试方法是否有捷径?我想要发生的是,如果我有一个名为TestClass的测试类,那么在我的类文件中,如果我创建一个新方法,我可以右键单击新方法并单击方法本身上的"创建测试".这个类有一个选项,但是我无法看到它的方法级别.看看这张照片,你会看到该选项适用于该类(通过按alt + enter),但我也希望它可用于该方法.

在班级

更新:似乎选项可能在Intelliji中,但我在Android Studio 1.1中找不到.当我在android工作室(托管类已经有一个测试用例)的方法中点击alt +输入时,我得到这个菜单:

在此输入图像描述

这是android studio中有趣的事情,如果我进入测试用例类本身,那么我会看到在该类中创建测试方法的选项.它只是没有出现在我需要测试的具体类中:

在此输入图像描述

testing junit intellij-idea android-studio

16
推荐指数
3
解决办法
1万
查看次数

Android数据绑定 - 如何从dimens.xml获取维度

我想根据我在dimens.xml中创建的维度设置边距它自己的尺寸很好,它只是数据绑定在下面的情况下找不到它:

<TextView
           android:id="@+id/title_main"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/disableButton"
*************
        android:layout_marginBottom="@{@bool/showAds ? 
@dimen/frontpage_margin_ads: @dimen/frontpage_margin_noads}"
*************        
android:gravity="center_horizontal"
        android:text="@string/app_name"
        android:textColor="@android:color/holo_orange_dark"
        android:contentDescription="@string/app_name"
        android:textSize="64sp"
        android:textStyle="bold" />
Run Code Online (Sandbox Code Playgroud)

它确实找到了它,但它说marginbottom不能采用float类型.我怎样才能解决这个问题?我尝试将这两个维度转换为int,但后来却抱怨它无法转换为int.

我的维度xml文件如下所示:

    <resources>

    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
    <dimen name="bigText">44sp</dimen>
    <dimen name="littleText">44sp</dimen>
    <dimen name="mediumText">40sp</dimen>
        <dimen name="smallText">24sp</dimen>
    <dimen name="fab_margin">16dp</dimen>
    <dimen name="frontpage_margin_noads">0dp</dimen>
    <dimen name="frontpage_margin_ads">13dp</dimen>


</resources>
Run Code Online (Sandbox Code Playgroud)

data-binding android

15
推荐指数
1
解决办法
8488
查看次数

Android Studio构建风格 - 如何以不同的风格获得相同的源文件

我需要在android studio中为应用程序创建一个演示风格.在我的应用程序级gradle文件中,我创建了另一种名为demo的风格,当然还有默认的风味.它看起来像这样:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.uen229.myapplication"
        minSdkVersion 17
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    productFlavors {
        demo {
            applicationId "com.buildsystemexample.app.demo"
            versionName "1.0-demo"
        }
        full {
            applicationId "com.buildsystemexample.app.full"
            versionName "1.0-full"
        }
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
}
Run Code Online (Sandbox Code Playgroud)

这是我的项目结构的图像,我在其中创建了一个demo flavor目录:

在此输入图像描述

现在谈到这个问题.我有两个名为Hello.java的类.两者都有各自的风味和印刷不同的东西.我现在给你看两个文件:

import android.util.Log;

/** this is from demo flavor directory**/

public class Hello {

    Hello(){ …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-gradle-plugin android-flavors

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

iOS - 为什么要快速灵活地使用XCTest

Quick是一种行为驱动的开发测试框架.我想知道为什么这比定期XCTests更好.Nimble只是一个匹配库,但它使得测试很容易阅读,比如期望(13)> 9.

对我而言,Quick提供了一个新的词汇表来编写测试(XCTests没有),并使您专注于编写单元测试.基本上它是TDD的特征诱导路径.当测试失败时,它也更具描述性.

我注意到的另一件事是,如果我想看一个方法做什么,如果我去快速规范我可以很容易地阅读什么是被测试,然后了解更多关于方法而不是写方法的评论.因此,快速规范充当对方法的评论.

关于Quick或BDD还有什么我应该知道的吗?

bdd ios quick-nimble

14
推荐指数
1
解决办法
1924
查看次数

Android - myLooper()vs getMainLooper()

只是澄清但是在MAIN Thread上的Android活动中,如果我调用Looper.myLooper()vs Looper.getMainLooper()返回相同的引用,对吧?他们是一样的东西 ?我知道我永远不必调用这些通常因为android负责这个,但我想知道它们从主线程调用时有何不同?

如果从主线程我打电话

Looper.myLooper().quit();
// or
Looper.getMainLooper().quit();
Run Code Online (Sandbox Code Playgroud)

它们都提供相同的运行时异常,所以我假设它们是相同的引用:

Looper.myLooper().quit();
// or
Looper.getMainLooper().quit();
Run Code Online (Sandbox Code Playgroud)

谁能确认一下?

android android-looper

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

enum vs android @Intdef - 哪一个更好地优化

我知道,当将常量与枚举进行比较时,常量会占用较少的空间并且可以是原始的.我正在研究 android中的@Intdef注释,有人可以告诉我它是否更好的存储使用@Intdef vs enum.是否现在建议在android中放置枚举并尽可能使用@intdef前进?可以@Intdef做多态,我怀疑吗?

从android文档中关于内存开销:

枚举通常需要的内存是静态常量的两倍多.你应该严格避免在Android上使用枚举.

enums android android-support-library

14
推荐指数
2
解决办法
5954
查看次数

Android数据绑定 - 如何使用ViewStub进行数据绑定

无论如何使用viewStubs与dataBinding?可以ViewStubProxy帮忙吗?

我的存根当前看起来像这样:

    <ViewStub
  android:id="@+id/stub_import"
  android:inflatedId="@+id/panel_import"

  android:layout="@layout/progress_overlay"

  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="@{myobject.bottom ? bottom:top}" />
Run Code Online (Sandbox Code Playgroud)

但是当我给viewStub充气时,这个布局会被取代,所以ViewStubs如何与android dataBinding一起使用?

这是我从文档中看到的:

ViewStubs

ViewStubs与普通视图略有不同.它们开始是不可见的,当它们要么被显示或被明确告知要膨胀时,它们会通过膨胀另一个布局来替换它们.

由于ViewStub基本上从View层次结构中消失,因此绑定对象中的View也必须消失以允许收集.由于视图是最终的,因此ViewStubProxy对象取代了ViewStub,使开发人员在ViewStub存在时可以访问ViewStub,并且在ViewStub膨胀时也可以访问膨胀的View层次结构.

在膨胀另一个布局时,必须为新布局建立绑定.因此,ViewStubProxy必须侦听ViewStub的ViewStub.OnInflateListener并在那时建立绑定.由于只有一个可以存在,ViewStubProxy允许开发人员在其上设置一个OnInflateListener,它将在建立绑定后调用它.

data-binding android viewstub

14
推荐指数
2
解决办法
5640
查看次数

什么是用户定义的运行时属性中的关键路径?

我继承了一个项目,我对某个键是什么感到困惑.我的问题是,styleName键路径是什么?它是视图的属性吗?我怎样才能找到可用的关键路径?

例如,在我从故事板中选择UILabel后,我检查身份检查器,并在用户定义的运行时属性中,我看到以下内容:

在此输入图像描述

我试过打开main-styles.plist文件但不确定它是如何链接在一起的.

当我点击属性检查器(同时仍然保持故事板中的UILabel突出显示)时,它是这样的:

在此输入图像描述

xcode user-defined-fields interface-builder ios

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

android Drawable - getConstantState.newDrawable()vs mutate()

在android中我已经阅读了一些关于drawable如何共享一个常量状态的文章.因此,如果您对drawable进行更改,则会影响所有相同的位图.例如,假设你有一个明星可绘制的列表.更改一个alpha将改变所有星形drawables alpha.但是您可以使用mutate来获取没有共享状态的drawable副本.
我正在阅读的文章就在这里

现在我的问题:

android中以下两个调用之间有什么区别:

Drawable clone = drawable.getConstantState().newDrawable();

// vs

Drawable clone = (Drawable) drawable.getDrawable().mutate();
Run Code Online (Sandbox Code Playgroud)

对我来说,他们都克隆了一个drawable,因为他们都返回了一个没有共享状态的drawable.我错过了什么吗?

android android-drawable

12
推荐指数
1
解决办法
3186
查看次数