小编Che*_*eng的帖子

Google提供了2个不同的HttpURLConnection用法示例 - 我们应该调用HttpURLConnection的断开连接,还是调用InputStream?

Google提供了两种不同的HttpURLConnection使用示例.

调用InputStreamclose

http://developer.android.com/training/basics/network-ops/connecting.html

// Given a URL, establishes an HttpUrlConnection and retrieves
// the web page content as a InputStream, which it returns as
// a string.
private String downloadUrl(String myurl) throws IOException {
    InputStream is = null;
    // Only display the first 500 characters of the retrieved
    // web page content.
    int len = 500;

    try {
        URL url = new URL(myurl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds …
Run Code Online (Sandbox Code Playgroud)

android

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

使用Google Play应用内结算进行一次性购买的计时赛

目前,我可以免费下载功能有限的应用.要解锁完整功能,用户需要通过Google Play应用内结算进行一次性购买.

最近,为了提高转换率,我计划提供计时全功能.

这意味着,用户可以在前7天内使用完整功能,而无需执行一次性购买.

7天后,他将回归具有有限功能的应用程序.如果他喜欢过去7天的全部功能,他将进行一次性购买.如果没有,他会让它成为:)

我想知道,有什么方法可以利用现有的应用内购买结算API来实现我的计时功能吗?

如果可能的话,我不想自己处理服务器端.

我知道应用内订阅模式确实提供试用期:http://developer.android.com/google/play/billing/billing_subscriptions.html

但是,订阅模式不是我想要的.我属于非消耗品

android in-app-purchase

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

为什么Android 4.2会尝试从drawable-xhdpi-v4获取资源

最近,我收到了大量的崩溃报告

android.content.res.Resources$NotFoundException: File res/drawable-xhdpi-v4/flag_au.png from drawable resource ID #0x7f0200bc
    at android.content.res.Resources.loadDrawable(Resources.java:1970)
    at android.content.res.Resources.getDrawable(Resources.java:660)
Run Code Online (Sandbox Code Playgroud)

我觉得很奇怪,因为崩溃报告来自Android 4.2,设备@ Tab7QC-16

我在xhdpi中有资源.我希望Android 4.2应该从xhdpi中选择资源.

我不打算提供drawable文件夹.因为,我将把mdpi大小的图像放入其中.当目标设备将其扩展到xhdpi时,它看起来不会很好.

我想我可以通过将文件夹xhdpi克隆到xhdpi-v4来"解决"崩溃.

但是,问题是,为什么Android 4会尝试从drawable-xhdpi-v4获取资源?

android

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

targetSdkVersion 23通过accountManager.getAccounts()返回0长度数组

我在真正的Nexus 5设备Android 6.0.1中观察到以下奇怪的结果

我在推出应用程序时运行以下简单代码.

Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
AccountManager accountManager = AccountManager.get(this);
Account[] accounts = accountManager.getAccounts();
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,如果我将我设置targetSdkVersion为22,21,19.它返回非空数组.

但是,当我改变targetSdkVersion和测试时

defaultConfig {
    applicationId "org.yccheok.myapplication"
    minSdkVersion 19
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
Run Code Online (Sandbox Code Playgroud)

上面的代码返回0长度数组!

知道为什么在编译时会出现问题targetSdkVersion=23.

请注意,在产生问题期间,无论何时更改targetSdkVersion并通过Android Studio运行,您都需要清除应用数据,清除应用缓存并手动卸载所有用户.

以下是在Nexus 5设备Android 6.0.1中重现问题的步骤

  1. 通过File - > New - > New Projetct在Android Studio中创建项目...
  2. 选择"空白活动"

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.yccheok.myapplication">

    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar"> …
Run Code Online (Sandbox Code Playgroud)

android runtime-permissions

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

FieldPath 字段名称不能包含“.” 在 $group

我有以下 mongo 数据,看起来像这样

{
    eventType : "mousedown",
    eventArgs : {
        type : "touchstart",
        elementId : "id1"
    },
    creationDateTime : ISODate("2017-02-24T07:05:49.986Z")
}
Run Code Online (Sandbox Code Playgroud)

我编写了以下查询来执行组计数。

db.analytics.aggregate
(
    {
        $match :
        {
            $and : 
            [
                {"eventArgs.type" : 'touchstart'}, 
                {eventType : 'mousedown'}, 
                {creationDateTime : {$gte : ISODate("2017-02-24T000:00:00.000Z")}}
            ]
        }
    },
    {
        $group : 
        {
            _id : 
            {
                "eventsArgs.elementId" : "$elementId"
            },
            count : 
            {
                $sum : 1
            }
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

我收到错误$group,说明

FieldPath field names may not contain '.'
Run Code Online (Sandbox Code Playgroud)

如果我不能指定'.' 在

        $group : …
Run Code Online (Sandbox Code Playgroud)

mongodb

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

如何使用花来监视多于一名工人

目前,我基于以下内容创建芹菜工人+花卉监控解决方案

https://github.com/itsrifat/flask-celery-docker-scale

芹菜工人和花卉监测均在同一目录中运行 flask-celery

原因是,让Flower可以访问Celery工作者代码模块,并且下面带有-Aflag的命令将起作用

entrypoint: flower
command: -A tasks --port=5555 --broker=redis://redis:6379/0
Run Code Online (Sandbox Code Playgroud)

这就是他们的docker-compose.yml(https://github.com/itsrifat/flask-celery-docker-scale/blob/master/docker-compose.yml)的样子

  worker:
    build:
      context: ./flask-celery
      dockerfile: Dockerfile
    depends_on:
      - redis
  monitor:
    build:
      context: ./flask-celery
      dockerfile: Dockerfile
    ports:
     - "5555:5555"
    entrypoint: flower
    command:  -A tasks --port=5555 --broker=redis://redis:6379/0
    depends_on:
- redis
Run Code Online (Sandbox Code Playgroud)

现在,我想创建另一个新的工作task2.py程序代码,它将位于名为的新目录中flask-celery2

因此,我应该如何修改Dockerfile/ docker-compose.yml以便花朵能够同时监视taskstasks2

celery docker flower

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

为什么在Android Studio中生成矢量图像时需要特定大小?

我首先想到的是Vector资产的目的是,它使我们能够在不影响图像质量的情况下进行放大/缩小.

如果是这样,我可以知道为什么在Android Studio中生成矢量图像时我们需要特定的大小?

在此输入图像描述

我倾向于生成2种不同大小的Vector.

24×24

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M19,2h-4.18C14.4,0.84 13.3,0 12,0c-1.3,0 -2.4,0.84 -2.82,2L5,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,4c0,-1.1 -0.9,-2 -2,-2zM12,2c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM19,20L5,20L5,4h2v3h10L17,4h2v16z"/>
</vector>
Run Code Online (Sandbox Code Playgroud)

96×96

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="96dp"
    android:height="96dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M19,2h-4.18C14.4,0.84 13.3,0 12,0c-1.3,0 -2.4,0.84 -2.82,2L5,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,4c0,-1.1 -0.9,-2 -2,-2zM12,2c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM19,20L5,20L5,4h2v3h10L17,4h2v16z"/>
</vector>
Run Code Online (Sandbox Code Playgroud)

除了android:widthandroid:height参数外,内容看起来相同.

android

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

WorkManager beginUniqueWork无法按预期工作

目前,我正在使用WorkManager 1.0.0-alpha02.

def work_version = "1.0.0-alpha02"
implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin
// optional - Firebase JobDispatcher support
implementation "android.arch.work:work-firebase:$work_version"
Run Code Online (Sandbox Code Playgroud)

当应用程序退出时,使用以下代码执行后台工作程序没有问题.

使用enqueue,按预期工作

OneTimeWorkRequest oneTimeWorkRequest =
        new OneTimeWorkRequest.Builder(SyncWorker.class)
                .addTag(SyncWorker.TAG)
                .build();

WorkManager workManager = WorkManager.getInstance();

workManager.enqueue(oneTimeWorkRequest);
Run Code Online (Sandbox Code Playgroud)

因为,我想避免SyncWorker同时运行多个.我试着用

使用beginUniqueWork,不起作用

OneTimeWorkRequest oneTimeWorkRequest =
        new OneTimeWorkRequest.Builder(SyncWorker.class)
                .addTag(SyncWorker.TAG)
                .build();

WorkManager workManager = WorkManager.getInstance();

workManager.beginUniqueWork(
        SyncWorker.TAG,
        ExistingWorkPolicy.REPLACE,
        oneTimeWorkRequest
);
Run Code Online (Sandbox Code Playgroud)

SyncWorker 根本没有运行.

我可以知道我错过了哪一步吗?谢谢.

android android-workmanager

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

如何防止自定义 DialogFragment 在显示时隐藏键盘

有 2 种方法可以通过DialogFragment.

  1. 使用覆盖onCreateDialog并返回对话框AlertDialog.Builder
  2. 覆盖onCreateView

我们注意到,如果我们覆盖onCreateDialog,之前显示的软键盘将不会被隐藏。

但是,如果我们覆盖onCreateView之前显示的软键盘将被隐藏。

onCreateDialog不会隐藏软键盘

在此输入图像描述


onCreateView将隐藏软键盘

在此输入图像描述


隐藏软键盘不是我们想要的行为。我们希望软键盘保持原样。

onCreateDialog但是,由于DialogFragment 中提到的 ViewPager 限制 - IllegalStateException: Fragment does not have a view ,我们无法使用该方法。简而言之,如果您需要ViewPager在对话框中很好地工作,则无法使用onCreateDialog.

如果我们使用onCreateView,我们可以实现除了“不隐藏软键盘”之外的一切。

您知道为什么覆盖onCreateView创建自定义对话框会隐藏键盘吗?我们怎样才能防止这种行为呢?


代码

我的对话框风格是:

<style name="CustomDialog" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

ColorDialogFragment.java

public class ColorDialogFragment extends DialogFragment {
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private ColorFragmentPagerAdapter colorFragmentPagerAdapter;

    public static ColorDialogFragment newInstance() {
        ColorDialogFragment colorDialogFragment …
Run Code Online (Sandbox Code Playgroud)

android android-softkeyboard android-dialogfragment

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

启用夜间模式后,如何获取通知下拉背景颜色并确定最佳文本颜色?

最近,启用Android 9.0 Pie和Android OS的夜间模式后,我的用户向我发送了以下屏幕截图。

在此处输入图片说明

如您所见,股票名称不可见,因为股票名称使用了黑色。在正常的白色主题中,它看起来如下

在此处输入图片说明


这是我的代码用来突出显示文本颜色。在我的代码中,我始终假定下拉通知的背景是白色。(如果启用了暗模式,那是不正确的)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="NotificationTitle" parent="android:TextAppearance.Material.Notification.Title"></style>
</resources>


public SpannableString getFallBelowSpannableString(Context context) {
    if (fallBelowSpannableString != null) {
        return fallBelowSpannableString;
    }

    if (fallBelow == null) {
        return null;
    }

    // The attributes you want retrieved
    int[] attrs = {android.R.attr.textColor};
    TypedArray ta = context.obtainStyledAttributes(R.style.NotificationTitle, attrs);
    int textColor;
    try {
        textColor = ta.getColor(0, context.getResources().getColor(R.color.notification_symbol_name));
    } finally {
        ta.recycle();
    }

    final String notificationMessage = context.getString(R.string.falls_below_template, symbol, org.yccheok.jstock.watchlist.Utils.toStockPrice(fallBelow));
    fallBelowSpannableString = new SpannableString(notificationMessage);
    ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(textColor);
    fallBelowSpannableString.setSpan(foregroundColorSpan, …
Run Code Online (Sandbox Code Playgroud)

android

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