小编Che*_*eng的帖子

将具有较少字段的新 POJO 类映射到现有的 Room 表

目前,我们有以下 Dao 和模型类。

笔记道

@Query("SELECT * FROM note")
public abstract LiveData<List<Note>> getAllNotes();
Run Code Online (Sandbox Code Playgroud)

笔记类

@Entity(
    tableName = "note"
)
public class Note {
    @ColumnInfo(name = "title")
    private String title;

    // Can contain a huge String.
    @ColumnInfo(name = "body")
    private String body;
}
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下,我们只对加载感兴趣title。

一次加载所有Note带有大body字符串的s ,可能会导致OutOfMemoryException

有什么办法,我们可以创建另一个 POJO 如下?

public class SimpleNote {
    private String title;
}
Run Code Online (Sandbox Code Playgroud)

然后,我们可以返回SimpleNotefrom 的列表NoteDao?

@Query("???")
public abstract LiveData<List<SimpleNote>> getAllSimpleNotes();
Run Code Online (Sandbox Code Playgroud)

sqlite android android-sqlite android-database android-room

6
推荐指数
2
解决办法
1470
查看次数

Billing Library 2.0 中的新“重新订阅”功能是什么?它与旧的 Billing Library 1.2.2 有何不同?

在 Android Developer Console 中,我看到了这条消息

您的用户目前无法重新订阅,因为您的应用并未在所有有效 APK 中使用 Billing Library 2.0

但是,我很纳闷。目前,我们使用的是 Billing Library 1.2.2。

这就是我们决定是否向用户显示订阅按钮的方式。

  • 在 queryPurchases 期间,我们将执行List<Purchase> purchases = PurchasesResult.getPurchasesList(). 如果在 中找不到订阅的 SKU purchases,我们将显示订阅按钮。如果没有,我们将隐藏订阅按钮。
  • 如果这是一个新订阅者,他的purchases. 因此,他将看到订阅按钮,并允许再次订阅。
  • 如果这是之前订阅的并且已经取消的用户,我们假设他的 SKUpurchases也没有!!!因此,他将看到订阅按钮,并允许再次订阅同一个 sku。

如您所见,即使使用旧的 Billing Library 1.2.2,我们仍然允许用户再次重新订阅相同的 SKU,以重新订阅他之前取消的订阅。

如果是这样,为什么Billing Library 2.0 中有一个名为“重新订阅”(https://developer.android.com/google/play/billing/subs#resubscribe)的特殊功能?它与我们当前的 Billing Library 1.2.2 流程有何不同?

android in-app-billing in-app-subscription

6
推荐指数
1
解决办法
969
查看次数

是否可以通过 Room 创建不区分大小写的索引?

目前,我有一个 Room 实体,它看起来像

@Entity(
        tableName = "holiday_country",
        indices = {
                @Index(value = "code", unique = true)
        }
)
public class HolidayCountry
Run Code Online (Sandbox Code Playgroud)

这相当于有索引

CREATE UNIQUE INDEX `index_holiday_country_code` ON `holiday_country` (`code`)
Run Code Online (Sandbox Code Playgroud)

但是,我还需要有以下第二个索引,因为有时我会执行不区分大小写的查询。

CREATE UNIQUE INDEX `index_holiday_country_code_nocase` ON `holiday_country` (`code`  COLLATE NOCASE)
Run Code Online (Sandbox Code Playgroud)

如果是这样,应该如何在 Room 实体中声明这样的索引?

sqlite android android-room

6
推荐指数
1
解决办法
231
查看次数

当 viewContext.automaticallyMergesChangesFromParent 设置为 true 时,viewContext 指的是哪一个父级?

通常需要有后台上下文来执行写操作。

// Set automaticallyMergesChangesFromParent to true
persistentContainer.viewContext.automaticallyMergesChangesFromParent = true
persistentContainer.performBackgroundTask { backgroundcontext in
    // Do your work...
    let object = backgroundContext.object(with: restaurant.objectID)
    backgroundContext.delete(object)
    // Save changes to persistent store, update viewContext and notify fetched results controller
    try? backgroundContext.save()
}
Run Code Online (Sandbox Code Playgroud)

我对 很困惑automaticallyMergesChangesFromParent。

viewContext因为,我对(与主队列关联的托管对象上下文) 和进行了以下观察backgroundContext。

  1. viewContext.parent为零
  2. backgroundContext.parent为零

我的问题是

  1. 如果我们需要设置viewContext.automaticallyMergesChangesFromParent = true,以便viewContext接收来自 的更改backgroundContext,这是否意味着backgroundContext是 的父级viewContext?
  2. 如果不是,那家长viewContext.automaticallyMergesChangesFromParent = true指的是哪位家长?

core-data ios swift

6
推荐指数
1
解决办法
709
查看次数

用户消息平台SDK:如何确定是否允许我们展示个性化广告或非个性化广告?

我们一直在使用已弃用的Google 移动广告同意 SDK

它ConsentStatus让我们知道是否应该展示个性化广告或非个性化广告。

请参阅源代码:https://github.com/googleads/googleads-consent-sdk-android/blob/main/consent-library/src/main/java/com/google/ads/consent/ConsentStatus.java

public enum ConsentStatus {
    @SerializedName("unknown")
    UNKNOWN,
    @SerializedName("non_personalized")
    NON_PERSONALIZED,
    @SerializedName("personalized")
    PERSONALIZED,
}
Run Code Online (Sandbox Code Playgroud)

Google 强烈建议我们迁移User Messaging Platform SDK

但是,我们注意到没有办法知道我们是否可以展示个性化广告或非个性化广告。新ConsentStatus外观如下。

public @interface ConsentStatus {
    int UNKNOWN = 0;
    int NOT_REQUIRED = 1;
    int REQUIRED = 2;
    int OBTAINED = 3;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


请问,如果我们应用User Messaging Platform SDK,我们应该使用什么样的逻辑来确定是否允许展示个性化广告或非个性化广告?

android admob user-messaging-platform

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

寻找免费的GUI工具来使用PostgreSQL

目前,我使用独立的GUI工具DbSchema来设计我的数据库模式.

我喜欢它,因为它可以

  1. 生成SQL代码.
  2. 在我的整个数据库模式上有图形视图.

替代文字http://sites.google.com/site/yanchengcheok/Home/PostgreSQL.png

但是,我意识到DbSchema生成的SQL代码没有被PostgreSQL识别.

CREATE TABLE lot (
    lot_id    serial AUTO_INCREMENT NOT NULL,
    operator_name    text,
    machine_name    text,
    timestamp    timestamp,
    CONSTRAINT pk_lot_id PRIMARY KEY(lot_id)) 

CREATE TABLE unit (
    unit_id    serial AUTO_INCREMENT NOT NULL,
    fk_lot_id    serial NOT NULL,
    CONSTRAINT pk_unit_id PRIMARY KEY(unit_id),
    CONSTRAINT fk_lot_id FOREIGN KEY( fk_lot_id ) REFERENCES lot ( lot_id )) 
Run Code Online (Sandbox Code Playgroud)

我收到错误:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "AUTO_INCREMENT"
Run Code Online (Sandbox Code Playgroud)

是否有任何替代"正常工作"免费工具,我可以使用PostgreSQL,提供以上2个功能?

database postgresql

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

为什么Visual C++ 6抱怨私有析构函数

下面的代码适用于Visual C++ 2008.但是,当涉及到Visual C++ 6时,我收到以下错误.我可以知道为什么,以及如何解决错误,但仍然使析构函数保持私有状态.

class X
{
public:
    static X& instance()
    {
        static X database;
        return database;
    }

private:

    X() {}                    // Private constructor
    ~X() {}                   // Private destructor
    X(const X&);              // Prevent copy-construction
    X& operator=(const X&);   // Prevent assignment
};

int main()
{
    X::instance();
}
Run Code Online (Sandbox Code Playgroud)

C:\ Projects\ttt6\main.cpp(178):错误C2248:'X :: ~X':无法访问类'X'中声明的私有成员C:\ Projects\ttt6\main.cpp(175):请参阅'X ::〜X'的声明

c++

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

"多字节字符集"的当前现代术语是什么

我曾经混淆了一段时间:

对Unicode和多字节文章的困惑

在阅读了所有贡献者的评论后,再加上:

看一篇旧文章(2001年):http://www.hastingsresearch.com/net/04-unicode-limitations.shtml,讨论unicode:

是一个16位字符定义,允许理论总数超过65,000个字符.但是,世界上完整的字符集总计超过170,000个字符.

并查看当前的"现代"文章:http://en.wikipedia.org/wiki/Unicode

最常用的编码是UTF-8(对于所有ASCII字符使用1个字节,与标准ASCII编码使用相同的代码值,对于其他字符使用最多4个字节),现在已过时的UCS-2(它使用2个字节表示所有字符,但不包括Unicode标准中的每个字符),以及UTF-16(扩展UCS-2,使用4个字节编码UCS-2中缺少的字符).

似乎在VC2008的编译选项中,字符集下的"Unicode"选项实际上意味着"在UCS-2中编码的Unicode"(或UTF-16?我不确定)

我尝试通过在VC2008下运行以下代码来验证这一点

#include <iostream>

int main()
{
    // Use unicode encoded in UCS-2?
    std::cout << sizeof(L"???") << std::endl;
    // Use unicode encoded in UCS-2?
    std::cout << sizeof(L"abc") << std::endl;
    getchar();

    // Compiled using options Character Set : Use Unicode Character Set.
    // print out 8, 8

    // Compiled using options Character Set : Multi-byte Character Set.
    // print out 8, 8
}
Run Code Online (Sandbox Code Playgroud)

似乎在使用Unicode字符集选项进行编译时,结果与我的假设相符.

但是多字节字符集怎么样?多字节字符集在当前"现代"世界中意味着什么?:)

c++ unicode internationalization visual-c++

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

多个表或多模式

Postgresql:使用每个具有 1 个模式的多个数据库更好,还是使用具有多个模式的 1 个数据库更好?

我是 PostgreSQL 模式概念的新手。

对于上述场景,我想知道

  1. 为什么我们不使用单个数据库(默认模式名为 public)
  2. 为什么我们没有一个表来存储多个用户行?
  3. 其他表保存用户相关信息,外键指向用户表。

谁能给我提供一个真实的案例场景,单数据库、多模式将非常有用,并且无法通过传统的单数据库、单模式来解决。

postgresql database-design

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

防止跨站点请求伪造 - 永远不要依赖于在Cookie标头中发送到您的服务器的SessionID

我正在阅读教程

http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ

它指出

请记住 - 您绝不能依赖于cookie标头中发送到服务器的sessionID; 只查看您的GWT应用程序在消息的有效负载中明确发送到您的服务器的sessionID.

用于防止http://en.wikipedia.org/wiki/Cross-site_request_forgery#Example_and_characteristics

有了这个神话,是否足以防止上述攻击?

security gwt

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