小编dor*_*506的帖子

InAppBilling V3 - 购买订阅项目时,"purchaseData"和"dataSignature"为空

我在使用新的InAppBilling V3购买subsciption项目时遇到问题

这是我的IABHelper的handleActivityResult方法:

    public boolean handleActivityResult(int requestCode, int resultCode, Intent data) {
            IabResult result;
            if (requestCode != mRequestCode)
                return false;

            checkSetupDone("handleActivityResult");

            // end of async purchase operation
            flagEndAsync();

            if (data == null) {
                Log.e(TAG + "Null data in IAB activity result.");
                result = new IabResult(IABHELPER_BAD_RESPONSE, "Null data in IAB result");
                if (mPurchaseListener != null)
                    mPurchaseListener.onIabPurchaseFinished(result, null);
                return true;
            }

            int responseCode = getResponseCodeFromIntent(data);
            String purchaseData = data.getStringExtra(RESPONSE_INAPP_PURCHASE_DATA);
            String dataSignature = data.getStringExtra(RESPONSE_INAPP_SIGNATURE);\
            ...
Run Code Online (Sandbox Code Playgroud)

在该代码之后,purchaseData和dataSignature为null,因此无法完成购买流程.

当我试图购买应用内商品时,一切正常.purchaseData和dataSignature不为null.

这家伙似乎遇到了同样的问题:
Google Play应用内购买返回错误代码-1008:null puchaseData或dataSignature

但它对我不起作用,我仍然在这两个领域都是空的.

我究竟做错了什么?提前致谢!

android billing in-app-purchase in-app-billing android-billing

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

有没有办法在APK安装失败时收到通知?

我正在写一个应用程序。在应用程序中,我以编程方式下载 APK 并启动启动 APK 安装的意图。

Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/" + "app.apk")),
                "application/vnd.android.package-archive");
        startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

一切都运转良好。

但是,例如,当我尝试启动损坏的 APK 的安装时,会出现一个对话框: 在此输入图像描述

我希望在安装 APK 时出现问题(APK 损坏、空间不足等...)时收到通知。

那么,有没有一种方法(事件或其他东西)可以收到通知,以便我可以用我自己的对话框替换“解析错误”默认对话框?

谢谢!

installation android apk

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

本机堆跟踪问题 - "Native Heap"选项卡为空

我想在我的应用程序中跟踪本机堆.

我在/ tools sdk的文件夹中打开了DDMS,正如我在教程中看到的那样,我确实看到了"Native Heap"选项卡.

但是,当我按下"更新堆"图标时,本机堆仍然是空的 - 我没有看到任何信息.

尝试在两台设备上,其中一台设备已植根.

我该如何解决这个问题?

谢谢!

截图:

在此输入图像描述

memory android native ddms

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

Eclipse Logcat没有获得当前过滤器的更新(Android)

我有这个令人讨厌的问题,我很确定也会遇到你们所有人.

我在logacat中添加了一个过滤器,以便查看仅属于我的应用程序的消息.问题是当我在当前过滤器中时,logcat没有得到更新(它适用于每个过滤器,包括"所有消息(无过滤器)"过滤器).

为了查看我错过的所有消息,我需要用鼠标点击过滤器.

怎么解决这个?

谢谢!

eclipse android logcat android-logcat

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

从片段访问工具栏(及其子代)?

我正在使用v7.widget.Toolbar组件构建应用程序.

我能够将工具栏添加到我的活动中,但我不知道如何(以及正确的方法?)从活动的片段中访问它.

这是工具栏

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
app:theme="@style/MainActionBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
tools:context=".MainActivity">

<ImageView
    android:background="@drawable/icon_1"
    android:paddingLeft="1dp"
    android:paddingRight="1dp"
    android:layout_marginLeft="19dp"
    android:id="@+id/menu_1"
    android:layout_gravity="center_vertical|left"
    android:src="@drawable/menu_burger"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<ImageView
    android:layout_marginRight="19dp"
    android:paddingLeft="1dp"
    android:paddingRight="1dp"
    android:id="@+id/menu_2"
    android:layout_gravity="center_vertical|right"
    android:src="@drawable/icon_2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

以下是我在活动中使用它的方式:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/view_home_toolbar" />

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
     ...
     ...

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

在我的活动中onCreate:

   Toolbar actionBar = (Toolbar) findViewById(R.id.toolbar);
   setSupportActionBar(actionBar);
Run Code Online (Sandbox Code Playgroud)

现在,例如,我想从我的片段中的工具栏访问"@ id/menu_1",我该怎么做?

getSupportActionBar()给了我ActionBar,但我需要工具栏

提前致谢!

android android-toolbar

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

CoreBluetooth“willRestoreState” - 到底应该在那里做什么?

我正在开发一个需要持续运行和跟踪一些外围特性的应用程序。

在前台一切正常。
它也可以在后台运行,但我不确定我是否正确执行。

我红了很多关于状态恢复和实施的帖子 willRestoreState,但其中很多都没有明确告诉你当这个方法被调用时该怎么做。

我正在制作的过程是这样的:

我正在创建一个中央管理器使用

myCentralManager =
        [[CBCentralManager alloc] initWithDelegate:self queue:nil
         options:@{ CBCentralManagerOptionRestoreIdentifierKey:
         @"myCentralManagerIdentifier" }];
Run Code Online (Sandbox Code Playgroud)

从这里我正在做以下常规流程
等待中央管理器启动 (centralManagerDidUpdateState) -> 扫描我的外围设备 -> 连接到它 -> 发现服务 -> 发现特征 -> 订阅特征 -> 阅读数据

然后我使用杀死我的应用程序

kill(getpid(), SIGKILL);
Run Code Online (Sandbox Code Playgroud)

我正在等待几秒钟,然后再次从我的外围设备开始做广告。

然后我可以看到该过程正在恢复生机,并且我的日志显示didFinishLaunchingWithOptionsAppDelegate 正在被调用。

然后我像这样恢复中央管理器:

 NSArray *identifiers = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey];

   if (identifiers && identifiers.count > 0) {
        _centralManager = [[CBCentralManager alloc] initWithDelegate:self
                                                               queue:nil
                                                             options:@{CBCentralManagerOptionRestoreIdentifierKey:[identifiers objectAtIndex:0]}];
    } 
Run Code Online (Sandbox Code Playgroud)

我也可以看到willRestoreState并被centralManagerDidUpdateState调用。

这就是我迷路的地方。我接下来该怎么做?如果我继续执行常规流程(我在上面描述过,所有似乎都可以正常工作 - 并且与上述方式相同。

但是——我做的对吗?

我应该做些什么willRestoreState吗?如果是,我应该怎么做?

提前致谢!

objective-c ios core-bluetooth bluetooth-lowenergy cbcentralmanager

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

在继承中使用Decodable会引发异常

我正在使用Rest API服务,在该服务中,响应分为基本响应,所有其他响应都从该继承。

我正在尝试使用Decoder接口为响应模型类构建相同的结构。

但是我在解码继承的类时遇到问题。

我试图解决此问题: 在带有继承的Swift 4中使用Decodable

但是没有运气。

这是初始结构:

class LoginResponse: BaseResponse{

    var Message: String?

    private enum CodingKeys: String, CodingKey{
        case Message
    }

    required init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        Message = try container.decode(String.self, forKey: .Message)
        let superDecoder = try container.superDecoder()
        try super.init(from: superDecoder)
    }
}

class BaseResponse: Decodable {

    var Status: Int?

    private enum CodingKeys: String, CodingKey{
        case Status
    }

    required init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self) // This …
Run Code Online (Sandbox Code Playgroud)

swift decodable

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

Android Studio 3.1 - Logcat输出已被破坏

我将Android Studio升级到3.1版

自更新以来,日志消息以群集形式打印.

例如,当我写作

Log.i("Tag", "message1")  
Log.i("Tag", "message2")   
Log.i("Tag", "message3")  
Log.i("Tag", "message4") 
Run Code Online (Sandbox Code Playgroud)

大部分时间它被打印为:

03-28 15:50:03.594 7057-7057/? I/Tag: message1
    message2
    message3
    message4
Run Code Online (Sandbox Code Playgroud)

代替:

03-28 15:50:03.594 7057-7057/? I/Tag: message1
03-28 15:50:03.594 7057-7057/? I/Tag: message2
03-28 15:50:03.594 7057-7057/? I/Tag: message3
03-28 15:50:03.594 7057-7057/? I/Tag: message4
Run Code Online (Sandbox Code Playgroud)

如前所述.

因此,过滤日志非常困难.

还有其他人有这个问题吗?

android logcat android-studio android-studio-3.1

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

MVVM:复杂视图/视图模型 -&gt; 多个 LiveData 对象?

大多数 MVVM 示例都处理非常简单的用户界面。

但是可以说我有一个有很多视图要更新的活动(即大量数据)

正如我在其他地方读到的,多个 ViewModel 对象是一种糟糕的模式。

所以,在我看来,有两种解决方案:

  1. 创建一个单独的对象(并为其创建一个 LiveData),该对象包含所有其他数据对象。
    但这有一个问题 - 每个更新的数据对象都会导致整个 UI 更新。

  2. 创建多个对象(并为其创建多个 LiveData 对象)。
    这意味着我需要观察每个 LiveData 对象。这个模式有问题吗?

提前致谢!

android mvvm android-livedata

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

透明状态栏(带可见导航栏)

我知道这个问题已经被问过很多次了,但所有的答案要么不起作用,要么使用了不推荐使用的代码:

我想达到与最新的谷歌地图应用程序相同的效果:

在此处输入图片说明

  • 完全透明的状态栏(只有状态栏。不是导航栏!)
  • 未弃用的解决方案

WindowCompat.setDecorFitsSystemWindows(window, false) 部分工作,因为它还隐藏了导航栏

android statusbar

5
推荐指数
2
解决办法
533
查看次数