小编Mar*_*tti的帖子

记录用户时更改NavigationView项目

我的应用程序的主要活动有一个导航抽屉,以这种方式在XML中实例化:

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/application_drawer"
    android:background="@color/white"/>
Run Code Online (Sandbox Code Playgroud)

现在,导航抽屉的菜单项如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/login"
        android:icon="@drawable/ic_action_person"
        android:title="@string/login"/>
    <item
        android:id="@+id/settings"
        android:icon="@drawable/ic_action_settings"
        android:title="@string/settings"/>
    <item
        android:id="@+id/terms"
        android:icon="@drawable/ic_action_about"
        android:title="@string/terms_and_conditions_menu"/>
    <item
        android:id="@+id/about"
        android:icon="@drawable/ic_action_about"
        android:title="@string/info_hotelsclick"/>
</group>
Run Code Online (Sandbox Code Playgroud)

我想做的是在某些条件下动态更改第一项(也可能是其他项).例如,我想在用户登录后用"注销"更改"登录"条目;-)

我怎样才能做到这一点?我设法以这种方式将一个项目添加到抽屉

    Menu menu = navigationView.getMenu();
    menu.add("Test");
Run Code Online (Sandbox Code Playgroud)

但这听起来对我不好,我很确定必须有一个更清洁的方式.

......但是呢?

android android-layout navigation-drawer

51
推荐指数
2
解决办法
4万
查看次数

FusedLocationApi.getLastLocation始终为null

我想在我的Android项目中简单地检索设备位置,为了做到这一点,我使用了play-services方法:

            protected synchronized void buildGoogleApiClient() {

    mGoogleApiClient = new GoogleApiClient.Builder( MainSearchActivity.this )
        .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
            @Override
            public void onConnected( Bundle bundle ){
                Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
                if( location == null ){
                    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, new LocationListener() {
                        @Override
                        public void onLocationChanged(Location location) {
                            lastLocation = location;
                        }
                    });
                }
            }
            @Override
            public void onConnectionSuspended( int i ){

            }

        })
        .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
            @Override
            public void onConnectionFailed( ConnectionResult connectionResult ){
                if( connectionResult.hasResolution() ){
                    try {
                        // Start an Activity that tries to …
Run Code Online (Sandbox Code Playgroud)

android location geolocation google-play-services

48
推荐指数
4
解决办法
5万
查看次数

在build.gradle中缺少使用Google Services 3.0.0和Maps API密钥的api_key /当前密钥

我的问题非常类似于使用Google Services 3.0.0丢失api_key /当前密钥,但复杂程度更高.

我今天早上将我的应用更新到com.google.gms:google-services:3.0.0以及所有play-services 9.0.0依赖项

compile 'com.google.android.gms:play-services-analytics:9.0.0'
compile 'com.google.android.gms:play-services-ads:9.0.0'
compile 'com.google.android.gms:play-services-identity:9.0.0'
compile 'com.google.android.gms:play-services-gcm:9.0.0'
Run Code Online (Sandbox Code Playgroud)

现在我得到了臭名昭着的错误

错误:任务':hotelsclick:processDebugGoogleServices'的执行失败.>缺少api_key/current_key对象

这似乎是由于google-services.json文件中缺少API密钥(所以我被告知).我从https://developers.google.com/cloud-messaging/android/client#get-config获取了一个新的API密钥,并在其中找到了以下字段.

  "api_key": [],
Run Code Online (Sandbox Code Playgroud)

我想我应该把我的Google Maps API密钥放在那里,但是这里出现了我遇到的双重问题:

1-如果我尝试将密钥放在该字段内,则不起作用.我试过两个

  "api_key": [{ "current_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE" }],
Run Code Online (Sandbox Code Playgroud)

  "api_key": ["XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE"],
Run Code Online (Sandbox Code Playgroud)

错误保持不变.

2-我一直在使用gradle来使用动态建筑.我将以下内容放在我的模块build.gradle中:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        debuggable false
        resValue "string", "google_maps_api_key", "ABCDEFGHILMNO... my maps release API key"
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
        zipAlignEnabled true
    }
    debug {
        resValue "string", "google_maps_api_key", "ZNTMRNCDNR... my google maps debug API key"
        debuggable true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
    } …
Run Code Online (Sandbox Code Playgroud)

android google-maps google-play-services android-gradle-plugin

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

iOS通用链接和GET参数

我们正在尝试使用Apple Universal Links在iOS上实现应用程序索引(我正在查看https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).

在"创建和上传关联文件"部分中,我看到我可以将索引限制为特定页面,这很好.

我想将索引限制为https://www.mywebsite.com?parameter=something,我该怎么办?

我在考虑这样的事情:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "MYID",
        "paths":[ "*?parameter=*" ]
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

你觉得它可行吗?我无法测试它,因为获取授权在网站根目录上上传文件需要时间,这就是为什么我问你是否认为它可以工作,我想上传文件一次,如果我能够.

谢谢

ios google-app-indexing ios-universal-links

11
推荐指数
2
解决办法
7835
查看次数

缺少Android上的数据增强了电子商务分析页面

我正在使用google-analytics SDK衡量我的Android应用结帐效果.我创建了一个Wrapper,我用它来发送命中(它有效)和异常(它也可以).我无法使其与电子商务数据一起使用.

为了发送电子商务数据,我创建了一个产品和一个productAction

    Product product = new Product()
            .setId(ID)
            .setCategory(category)
            .setBrand(brandID)
            .setCustomDimension(1, typology)
            .setCustomDimension(2, currency)
            .setPrice(getTotal())
            .setQuantity(1);
    // Add the step number and additional info about the checkout to the action.
    ProductAction productAction = new ProductAction(ProductAction.ACTION_PURCHASE)
            .setCheckoutStep(4)
            .setCheckoutOptions("Perform payment");
Run Code Online (Sandbox Code Playgroud)

然后

sendEcommerceCheckoutStep(product, productAction, "performPayment", getApplicationContext())

所述方法的主体是

    public void sendEcommerceCheckoutStep(Product product, ProductAction productAction, String checkoutStepName, Context context) {
        HitBuilders.ScreenViewBuilder builder = new HitBuilders.ScreenViewBuilder()
                .addProduct(product)
                .setProductAction(productAction)
                .addImpression(product, checkoutStepName);

        mTracker.setScreenName(checkoutStepName);
        mTracker.send(builder.build());
        mTracker.setScreenName(null);
    }
Run Code Online (Sandbox Code Playgroud)

现在,我希望数据流经分析(确实如此,我检查了adb日志),但我无法在分析Web界面中看到它.

这是我在分析网络界面上看到的:

Google Analytics(分析)电子商务视图

正如您所看到的,唯一获得数据的列是"Cart-to-Detail Rate".但是,如果我在任何其他专栏中没有任何数据,我如何才能获得购物车到详细信息?

这就是"产品性能"屏幕.这是"产品列表性能":

产生列表性能

所有其他列也是0.为什么它列出了"添加到购物车"的操作而不是其他操作?

android google-analytics enhanced-ecommerce

10
推荐指数
1
解决办法
394
查看次数

获取广告客户ID时出错

我注意到我的Android应用程序没有正确提供我的谷歌分析电子商务数据,而所有其他分析数据(屏幕视图,例外)都正确发布.

我已经开了一个关于这个主题的赏金但是进一步挖掘我在logcat中发现了一些错误:

获取广告客户ID时出错:java.io.IOException:java.util.concurrent.TimeoutException:等待服务连接超时

成功绑定到服务但从未获得onServiceConnected回调

我怀疑这些错误是由于某些不能在游戏服务级别工作的原因,这就是为什么我要打开一个新线程.

由于上述错误在点击发布之前出现在日志中,我的理论是我的电子商务数据因为它们而未正确发布.这里有人见过这样的东西吗?我可以尝试什么来解决它?

请注意我正在使用(取自build.gradle)

compile 'com.google.android.gms:play-services-analytics:9.4.0'
compile 'com.google.android.gms:play-services-ads:9.4.0'

apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)

和gradle插件

classpath 'com.android.tools.build:gradle:2.2.0-beta1'
Run Code Online (Sandbox Code Playgroud)

java android google-analytics google-play-services google-analytics-firebase

9
推荐指数
1
解决办法
2516
查看次数

Amazon EC2 - 无法远程连接到MariaDB

我正在配置我的EC2服务器.我设法安装php,laravel等(虽然有点痛苦).现在我

  • 在MariaDB上创建了一个用户
  • 从远程授予所有权限
  • 在my.cnf中启用bind-address = 0.0.0.0
  • 测试本地登录,工作
  • 在Mysql/Aurora的安全组中打开规则,端口3306,TCP,所有IP,包括传入和传出

但是仍然无法从远程登录,我明白了

ERROR 2003 (HY000): Can't connect to MySQL server on 'yyz.yyz.yyz.yyz' (110)
Run Code Online (Sandbox Code Playgroud)

我能做什么?我没有任何排序的iptables,一切都应该简单明了......但它不是:-(

我正在尝试使用此字符串从亚马逊网络外部进行连接

mysql -u myuser -pmypwd -h yyz.yyz.yyz.yyz -D myschema
Run Code Online (Sandbox Code Playgroud)

请注意,从服务器本身我可以使用连接

mysql -u myuser -p -h localhost -P 3306 -D myschema
Run Code Online (Sandbox Code Playgroud)

谢谢Marco

PS供参考,这是我的MariaDB用户

+---------------------------------------------+-----------+
| host                                        | user      |
+---------------------------------------------+-----------+
| %                                           | myuser    |
| 127.0.0.1                                   | root      |
| ::1                                         | root      |
| ip-yyz-yy-zz-yyz.us-west-2.compute.internal | root      |
| localhost                                   | root      |
| localhost                                   | myuser    | …
Run Code Online (Sandbox Code Playgroud)

mysql amazon amazon-ec2 amazon-web-services mariadb

8
推荐指数
1
解决办法
672
查看次数

Android应用程序索引和深层链接:我一直都错了吗?

我正在实现应用程序索引,我想我错过了什么,但我不知道是什么.

按照指南,我将我的intent-filters添加到应用程序并实现了我的活动所需的内容.

我的应用程序的包是com.towers.hotelsclick和相关的网站(我还没有把链接rel元标记,因为我只是测试)是www.hotelsclick.com

我在指南中看到了以下intent-filter示例

<activity
  android:name="com.example.android.PetstoreActivity"
 android:label="@string/title_petstore">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" />
        <data android:scheme="https" />
        <data android:host="www.examplepetstore.com" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

所以我用这种方式写了我的:

    <activity
        android:name=".ActivityForAppIndexing"
        android:label="@string/title_activity"
        android:screenOrientation="portrait" >
        <intent-filter android:label="@string/app_name">
            <data android:scheme="android-app"
                android:host="com.package.myappname" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="http"
                android:host="www.mywebsite.com" />
            <data android:scheme="https"
                android:host="www.mywebsite.com" />
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

此外,我编写了一个内容提供程序来解析URI

    <provider
        android:name=".contentproviders.HotelDetailsContentProvider"
        android:authorities="com.towers.hotelsclick" >
    </provider>
Run Code Online (Sandbox Code Playgroud)

应该如下映射URI:

    private static final String BASE_PATH = "https";
private static final String AUTHORITY …
Run Code Online (Sandbox Code Playgroud)

android uri deep-linking android-app-indexing google-app-indexing

7
推荐指数
1
解决办法
1324
查看次数

Chrome:"帐户登录详细信息已过期.请重新登录"

在最近几天,我的Linux Chrome版本(版本53.0.2785.116 64位)不记得我的谷歌帐户.每次我关闭电脑(而不是每次我关闭铬,我真的需要注销并再次登录)我再次登录所有帐户.右上角带有我姓名的按钮带有感叹号,如果我进入设置,我会看到"帐户登录详细信息已过期.再次登录"消息

在此输入图像描述

在此输入图像描述

现在,我真的不知道这里发生了什么.我在办公室使用chrome没有任何问题,在我的谷歌帐户中看不出任何错误.此外,我尝试删除--purge google-chrome并删除整个.config/google-chrome文件夹.重新安装chrome,登录,重新启动计算机,同样的问题.

现在我正在使用Firefox而没有任何问题,但是...我的意思是,无法使用我想要的浏览器令人沮丧.

你知道这种奇怪行为的原因是什么,以及如何解决这个问题?

谢谢Marco

PS似乎它可能是一个问题,因为到期令牌时间非常短(现在是9月29日,21:45.它将在25分钟后到期!)

在此输入图像描述

一旦我重新启动

在此输入图像描述

ubuntu google-chrome google-account

7
推荐指数
1
解决办法
1089
查看次数

Android Studio:如何显示所选行的作者

我注意到Visual Studio Code中有一个漂亮的功能(不知道是否归因于GitLens扩展):当我编辑一行时,我可以看到该行的GIT批注,包括作者,上次编辑时间和提交消息。

在此处输入图片说明

这很酷,因为它不需要占用您在Android Studio中启用的“注释”窗格所需的大量空间。快速,简单,直接。

我的问题是:据您所知,是否有任何Android Studio扩展允许类似的可视化?

谢谢马可

android annotations android-studio

7
推荐指数
3
解决办法
1303
查看次数