小编jlh*_*ora的帖子

android谷歌地图标记放置

在我的Android应用程序中,我需要将标记放在地图上的确切位置.我用51.507351,-0.127758(伦敦)位置在地图上标记了一个标记.我使用以下代码来完成工作.

googleMap.addMarker(new MarkerOptions().position(
        new LatLng(51.507351, -0.127758)).icon(
        BitmapDescriptorFactory.fromBitmap(BitmapFactory
                .decodeResource(getResources(),
                        R.drawable.q_icon))));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
        new LatLng(51.507351, -0.127758), 20));
Run Code Online (Sandbox Code Playgroud)

这是我的标记可绘图像:

在此输入图像描述

现在我的问题是,"Q"符号位于51.507351,-0.127758的位置.我需要将标记放在底部箭头开始的位置.

请查看图片,以便了解我的问题.

我怎样才能做到这一点?请帮我.

在此输入图像描述

android android-maps android-maps-v2

8
推荐指数
3
解决办法
9231
查看次数

从工作进程访问数据库

我正在尝试使用Python,Redis和PostgreSQL来放置需要访问数据库的作业.我正在做以下事情:

  1. 使用RQ将作业放入Redis队列:

    def queue_data(self, json_data):
        Queue().enqueue(process_data, json.dumps(json_data))
    
    Run Code Online (Sandbox Code Playgroud)
  2. process_data,使用psycopg2在PostgreSQL数据库上执行查询:

    def process_data(json_data):
        with psycopg2.connect("dbname=pgtest2db user=pgtest2user") as conn:
            with conn.cursor() as cursor:
                # I'm not actually doing this query, but you get the idea
                cursor.execute("SELECT * FROM some_table")
        conn.close()
    
    Run Code Online (Sandbox Code Playgroud)

显然,这远非最优,因为每次调用process_data都会创建一个新连接.实现这一目标的最佳做法是什么?谁应该负责管理数据库连接池?

请注意,我强迫自己不要使用ORM,因为我这样做是为了教自己,我想从更纯粹的角度理解这些模式.

编辑

我最终使用了像这样的自定义工作者:

import os
import node

import redis
from rq import Worker, Queue, Connection
from psycopg2.pool      import ThreadedConnectionPool

listen = ['high', 'default', 'low']
redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
redis_conn = redis.from_url(redis_url)
pool = ThreadedConnectionPool(minconn = 1, maxconn …
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2 redis

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

以编程方式设置稀松布颜色

我正在尝试以编程方式设置AppBarLayout的主要颜色.XML布局是AndroidStudio的Scrolling示例:

<android.support.design.widget.AppBarLayout android:id="@+id/app_bar"
    android:fitsSystemWindows="true" android:layout_height="@dimen/app_bar_height"
    android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar_layout"
        android:fitsSystemWindows="true" android:layout_width="match_parent"
        android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:contentScrim="?attr/colorPrimary">

        <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
            android:layout_height="?attr/actionBarSize" android:layout_width="match_parent"
            app:layout_collapseMode="pin" app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)

在活动中,我希望AppBarLayout中的所有项目都有黄色背景,所以我设置:

int barColor = Color.parseColor("#FFC107");
AppBarLayout barLayout = (AppBarLayout) this.findViewById(R.id.app_bar);
if (barLayout != null) {
    barLayout.setBackgroundColor(barColor);
}
toolbar.setBackgroundColor(barColor);

CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) this.findViewById(R.id.toolbar_layout);
if (collapsingToolbarLayout != null) {
    collapsingToolbarLayout.setBackgroundColor(barColor);
    collapsingToolbarLayout.setContentScrimColor(barColor);
}
Run Code Online (Sandbox Code Playgroud)

一切正常,除非我在滚动工具栏的中途(在FAB消失的确切位置).在该状态下,工具栏的颜色仍然是默认的主要颜色(蓝色,而不是黄色),如下图所示:

在此输入图像描述

那么,有两个问题:

  • 我错过了方法调用吗?
  • 调试这些场景的任何提示?在Android设备监视器的视图层次结构转储中,我无法分辨哪一个是用这种颜色着色的视图.

android material-design

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

Android:dialogFragment.isVisible()不起作用

我在使用时正在处理解雇/州洛斯地狱DialogFragment.为了避免无效的解雇,我正在覆盖该dismiss方法:

@Override
public void dismiss() {
    if (this.isVisible()) {
        super.dismiss();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,isVisible()false即使对话框,其实是可见的.这就是该isVisible()方法在其文档中所说的内容:

如果片段当前对用户可见,则返回true.这意味着:(1)已添加,(2)其视图附加到窗口,(3)未隐藏.

所以,如果我将方法更改为:

@Override
public void dismiss() {
    // This is almost the same as isVisible(), but the latter doesn't
    // work
    if (this.isAdded() && !this.isDetached() && !this.isHidden()) {
        super.dismiss();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后它完美地运作.这是预期的行为吗?

在使用Ion的HTTP请求之后执行所有操作:

DialogFragment dialog = DialogFragment.newInstance(..., ...);

Ion.with(context, url)
.setCallback(new FutureCallback<JsonObject>() {
    @Override
    public void onCompleted(Exception e, JsonObject result) {
        dialog.dismiss()
    }
});

dialog.show(getFragmentManager(), …
Run Code Online (Sandbox Code Playgroud)

android android-dialogfragment

5
推荐指数
0
解决办法
940
查看次数

SyncAdapter停止同步

我们的SyncAdapter实现与Android 4.4.4版不同步.适用于较低的API设备.

我们的应用程序使用AbstractThreadedSyncAdapter与服务器进行通信.我已经使用许多不同的设备和模型对其进行了测试,从API级别10开始运行android.我们最近购买了两台基于Android 4.4.4的设备(Moto E,Nexus 5),并开始遇到SyncAdapter问题.这是xml配置:

<sync-adapter 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="our.provider"
    android:accountType="our.authenticator"
    android:userVisible="false"
    android:allowParallelSyncs="false"
    android:isAlwaysSyncable="true"
    android:supportsUploading="true" />
Run Code Online (Sandbox Code Playgroud)

即使我放了手动和加急标志,同步也不会触发:

Bundle bundle = new Bundle();
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
ContentResolver.requestSync(SyncAdapter.dummyAccount(context), SYNC_PROVIDER, bundle);
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过WiFi和连接电源线来解除任何与电源使用相关的优化问题.目标SDK设置为最新版本:

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="20" />
Run Code Online (Sandbox Code Playgroud)

我拥有所有必要的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
Run Code Online (Sandbox Code Playgroud)

有一件事让我感到不同寻常.设备报告API级别= 19,但SDK说API 19等同于android 4.4.2,而不是android 4.4.4:

Android 4.4.2 = API级别19

这可能与这个问题有关吗?

很抱歉没有更多的帮助或描述,但我真的没有关于如何继续调试此问题的线索.提前致谢.

编辑

进一步思考:

  • 似乎与同步失败时使用的指数退避算法有关.在开始新请求并使用手动同步(忽略退避)之前,我最终取消了请求.我知道这不太理想,但在我的用例中,用户希望数据能够立即同步.确保给SyncManager一个:https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/content/SyncManager.java

  • 卸载应用程序并再次运行它可以解决问题,因此可能与帐户的权限有关.请注意,我确实从清单中删除了一些未使用的服务,但没有任何与SyncAdapter或其关联类相关的服务.

  • 似乎我并不孤单.

android android-syncadapter

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

cURL不尊重密码

我想用cURL测试某些密码的用法,但它似乎不尊重该--ciphers选项:

curl -vvv --tlsv1.0 --ciphers 'RC4-SHA' https://my.url.com/alive
* Hostname was NOT found in DNS cache
*   Trying ip...
* Connected to my.url.com (ip) port 443 (#0)
* TLS 1.0 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
* Server certificate: *.url.com
* Server certificate: DigiCert SHA2 Secure Server CA
* Server certificate: DigiCert Global Root CA
> GET /alive HTTP/1.1
> User-Agent: curl/7.37.1
> Host: my.url.com
> Accept: */*
> 
< HTTP/1.1 200 OK
* Server nginx/1.4.6 (Ubuntu) is not blacklisted
< Server: …
Run Code Online (Sandbox Code Playgroud)

ssl curl nginx starttls

4
推荐指数
1
解决办法
7046
查看次数