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

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

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

我想根据我在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) 我需要在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
Quick是一种行为驱动的开发测试框架.我想知道为什么这比定期XCTests更好.Nimble只是一个匹配库,但它使得测试很容易阅读,比如期望(13)> 9.
对我而言,Quick提供了一个新的词汇表来编写测试(XCTests没有),并使您专注于编写单元测试.基本上它是TDD的特征诱导路径.当测试失败时,它也更具描述性.
我注意到的另一件事是,如果我想看一个方法做什么,如果我去快速规范我可以很容易地阅读什么是被测试,然后了解更多关于方法而不是写方法的评论.因此,快速规范充当对方法的评论.
关于Quick或BDD还有什么我应该知道的吗?
只是澄清但是在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)
谁能确认一下?
无论如何使用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,它将在建立绑定后调用它.
我继承了一个项目,我对某个键是什么感到困惑.我的问题是,styleName键路径是什么?它是视图的属性吗?我怎样才能找到可用的关键路径?
例如,在我从故事板中选择UILabel后,我检查身份检查器,并在用户定义的运行时属性中,我看到以下内容:

我试过打开main-styles.plist文件但不确定它是如何链接在一起的.
当我点击属性检查器(同时仍然保持故事板中的UILabel突出显示)时,它是这样的:

在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 ×7
data-binding ×2
ios ×2
android-room ×1
bdd ×1
enums ×1
junit ×1
quick-nimble ×1
testing ×1
viewstub ×1
xcode ×1