小编log*_*ray的帖子

Billing API v3 IabHelper NullPointerException

编辑4月15日:在IabHelper中捕获nullpointer似乎已经停止了这个问题.我不再看到被抛出的异常,我将接受这个作为答案.


编辑4/04:稍微深入一点.有try catch块可以处理queryPurchases方法的RemoteExceptions和JSONExceptions,但是没有NullPointerException处理.我将尝试包括NullPointer异常处理,因此IabHelper在尝试querySkuDetails时看起来像这样:

    catch (NullPointerException e) {
        throw new IabException(IABHELPER_UNKNOWN_ERROR, "NullPointer while refreshing inventory.", e);
    }
Run Code Online (Sandbox Code Playgroud)

我刚刚提交了一个错误:

https://code.google.com/p/marketbilling/issues/detail?id=114


编辑3/25: 好吧,仍然收到这个崩溃...现在它发生在尝试从IabHelper的以下摘录的第3行获取上下文时:

int queryPurchases(Inventory inv, String itemType) throws JSONException, RemoteException {
    logDebug("Querying owned items, item type: " + itemType);
    logDebug("Package name: " + mContext.getPackageName());
Run Code Online (Sandbox Code Playgroud)

这很令人沮丧,因为在我的清单中,我总是使用我的应用程序的完整路径名称"name".

示例"com.myappname.blah.ClassName"

我也尝试将这个,MyClass.this,getApplicationContext()传递给mHelper.但是它们都会从野外设备中随机生成相同的NullPointer结果.我还在清单中尝试了name =".MyClass".这就是目前的样子:

mHelper = new IabHelper(MyClass.this, myKey);
Run Code Online (Sandbox Code Playgroud)

编辑 3/18/13:我仍然收到异常,即使在3/17上部署了新的IabHelper版本.

我开始在这里看到一个模式,崩溃是在执行mContext.getPackageName()时尝试获取上下文的全部内容.我很好奇为什么它适用于我的所有测试设备,我无法重现这种崩溃,而且似乎只是在少数设备上.

这是新的崩溃:

java.lang.NullPointerException
    at com.myapp.util.IabHelper.queryPurchases(SourceFile:836)
    at com.myapp.util.IabHelper.queryInventory(SourceFile:558)
    at com.myapp.util.IabHelper.queryInventory(SourceFile:522)
    at com.myapp.util.IabHelper$2.run(SourceFile:617)
    at java.lang.Thread.run(Thread.java:1019)
Run Code Online (Sandbox Code Playgroud)

由IabHelper引起的......

line 836: logDebug("Package name: " + mContext.getPackageName());
Run Code Online (Sandbox Code Playgroud)

编辑 3/17/13:我看到过去几个月发布了很多错误修复,我将尝试这里提供的最新代码,看看这是否能解决问题:

https://code.google.com/p/marketbilling/source/browse/v3/src/com/example/android/trivialdrivesample/util


在我的某个应用中,我使用的是结算API和随附的样板代码. …

android in-app-billing

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

检测状态栏可见性/ TYPE_SYSTEM_OVERLAY不自动调整大小

我正在使用众所周知的TYPE_SYSTEM_OVERLAY方法创建一个始终位于其他视图之上的全屏叠加层.

上的Moto Atrix2 API15和每个AVD从API 10通过17重叠视图自动调整时的状态栏中被另一个应用程序隐藏(垂直扩展).正如我认为的那样,叠加层似乎"保持在所有其他视图的顶部".当状态栏再次处于视图中时,叠加层会再次自动缩小其大小(较少的垂直像素,基本上减去状态栏的高度).

这是期望的行为,我倾向于认为这不是例外或有缺陷的行为,因为它在许多不同的模拟器以及至少一个设备制造商(摩托罗拉)上工作,可能更多,但我无法访问addtl devices.

问题: 在一个Samsung GS2 (API15)&也经过测试时Kindle Fire (API10?),当状态栏被另一个应用程序(全屏应用程序后面的状态栏)隐藏时,叠加层不会自动调整大小(填充状态栏曾经的空间).在这些设备上,在创建视图后,我第一次从视图的onSizeChanged覆盖中不再获取任何事件.

这是相关的代码:

params = new WindowManager.LayoutParams( 
    1, WindowManager.LayoutParams.MATCH_PARENT, 
    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
    |WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
    PixelFormat.TRANSPARENT);
wm.addView(sizeLayout, params);
Run Code Online (Sandbox Code Playgroud)

sizeLayout具有onSizeChanged覆盖.

我已经玩过几乎所有windowmanager layoutparam我能找到的东西,包括SYSTEM_ALERT,FLAG_LAYOUT_IN_SCREEN等等.直到我弄清楚这一点我才会睡觉!

编辑11/30/12:我从@deviant发现了这个:https://stackoverflow.com/a/9195733/1851478 这基本上就是我正在做的事情,但问题仍然是某些设备没有自动调整system_overlay的大小.也许我应该提出一个错误.

更多信息:如果我强制重绘(或者甚至只是加载覆盖应用程序),而在视图树顶部有一个全屏应用程序,我的覆盖仍然不会覆盖状态栏通常占用的空间(即使在绘制时状态栏不在视图中,因此看起来好像叠加层没有"覆盖"在最前面的全屏幕窗口的顶部(我已经创建并测试了许多全屏应用程序使用各种方法让它们全屏显示).在这些设备上,使覆盖层绘制状态栏的唯一方法是(即使状态栏不在视图中)是使用标志FLAG_LAYOUT_IN_SCREEN,但布局的大小永远不会改变,总是全屏,并且因此回到原来的问题,为什么这适用于某些设备但不适用于其他设备.

编辑12/12/12:所以我没有在这方面有任何进一步的运气,我确实尝试在视图上使用getLocalVisibleRect,但遗憾的是,由于我的应用程序不拥有SystemUI视图,因此无法检测覆盖层下面的内容.我想用自定义ROM我可以做到这一点,但我需要一个没有root的解决方案.

我确实看到市场上的其他应用程序在检测上面列出的非工作电话上的状态栏时遇到同样的问题.示例:酷工具,欧米茄状态栏和状态栏+.赏金提出来了.

编辑12/19/12图片添加.请注意,在工作设备上,灰色区域也"覆盖"黑色区域(任何当前全屏应用),黑色区域实际上覆盖整个屏幕,我只是将灰色区域显示为我的叠加,即使它也是全屏(减去或加上状态栏的高度,具体取决于工作/非工作设备以及是否在视图中).

在此输入图像描述 在此输入图像描述

layout android params

37
推荐指数
1
解决办法
7584
查看次数

ListFragment RuntimeException'android.R.id.list'缺失

编辑2013年1月16日:问题已解决!两天前,我发布了应用程序的更新版本,并通过使用正确识别了ListViews我原来所做的android:id="@android:id/list.实际上,抛出的异常是误导性的,与实际问题无关......

真正的解决方案来自于我实施了肖恩关于ListFragment通过传递null给观点来夸大观点的建议ViewGroup.我没有从新版本收到相同的Exception,新版本已被足够的设备下载,以确保此问题得到解决.但是我非常感谢劳伦斯的评论和回答,并将继续阅读他如何实例化片段.虽然他提出了将null传递给View inflater的建议,但Sean实际上是第一个这样做的,并且由于他的解决方案似乎已经解决了这个问题,所以奖金将相应地颁发.如果我学习/阅读更多关于实例化片段的不同方法,我会在将来更新这个帖子,正如劳伦斯的出色答案所建议的那样.太糟糕了我不能分裂赏金!

编辑2013年1月14日: 根据@ LawrenceChoy的要求,ListView相关XML文件位于http://pastebin.com/2xnG1VfF

编辑 2013年1月13日:我发布了我的应用程序的更新版本,android:id="@+id/android:list而不是android:id="@android:id/list"根据Bishan的建议使用,但我仍然收到我的Fragment Actvity没有的随机例外a ListView whose id attribute is 'android.R.id.list',即使该活动没有任何ListViews.LGE手机增加了另一个例外.

编辑2013年1月9日:虽然碧山提供了答案,但我希望能更多地解释为什么他的解决方案可能会阻止这种异常.在进一步阅读之后,我相信这是因为在使用自定义时ListView,应该使用+符号.但是我希望得到确认我是正确的或得到澄清,特别是考虑到两者似乎都适用于许多不同的设备和模拟器.在大约20分钟内筹集赏金以寻求有关此事的信誉良好的来源/答案.谢谢.


在最近更新发布到Play商店后,我从一些设备中获得了一些非常奇怪的行为.

在我的新版本中,我有一个FragmentActivity(称为TabsStyled),它使用a FragmentStatePagerAdapter来管理多个片段.我总共有4个片段,其中2个片段扩展ListFragment并且列出了由LoaderManager和填充的列表视图CursorLoader,所有这些片段都来自support.v4库.其他两个片段没有也ListViews没有延伸ListFragment.

我在多个设备和AVD上进行了大量测试,并且从未遇到任何缺少android.R.id.list的RuntimeExceptions.

然而,一旦发布,一些ACRA崩溃就出现在FragmentAcitivty上"Your content must have a ListView whose id attribute is 'android.R.id.list'".TabsStyled.class是FragmentActivity …

android android-listfragment android-fragmentactivity

0
推荐指数
1
解决办法
3131
查看次数