Google提供了两种不同的HttpURLConnection使用示例.
InputStream的closehttp://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) 目前,我可以免费下载功能有限的应用.要解锁完整功能,用户需要通过Google Play应用内结算进行一次性购买.
最近,为了提高转换率,我计划提供计时全功能.
这意味着,用户可以在前7天内使用完整功能,而无需执行一次性购买.
7天后,他将回归具有有限功能的应用程序.如果他喜欢过去7天的全部功能,他将进行一次性购买.如果没有,他会让它成为:)
我想知道,有什么方法可以利用现有的应用内购买结算API来实现我的计时功能吗?
如果可能的话,我不想自己处理服务器端.
我知道应用内订阅模式确实提供试用期:http://developer.android.com/google/play/billing/billing_subscriptions.html
但是,订阅模式不是我想要的.我属于非消耗品
最近,我收到了大量的崩溃报告
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获取资源?
我在真正的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中重现问题的步骤
<?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) 我有以下 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) 目前,我基于以下内容创建芹菜工人+花卉监控解决方案
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以便花朵能够同时监视tasks和tasks2?
我首先想到的是Vector资产的目的是,它使我们能够在不影响图像质量的情况下进行放大/缩小.
如果是这样,我可以知道为什么在Android Studio中生成矢量图像时我们需要特定的大小?
我倾向于生成2种不同大小的Vector.
<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)
<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:width和android:height参数外,内容看起来相同.
目前,我正在使用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)
当应用程序退出时,使用以下代码执行后台工作程序没有问题.
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同时运行多个.我试着用
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 根本没有运行.
我可以知道我错过了哪一步吗?谢谢.
有 2 种方法可以通过DialogFragment.
onCreateDialog并返回对话框AlertDialog.Builder。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 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)