小编And*_*uin的帖子

IabHelper PurchaseFinishedListener

如果我通过标准发送购买意向

String mySku = "android.test.purchased";

mHelper.launchPurchaseFlow(this, mySku, 10001, mPurchaseFinishedListener);
Run Code Online (Sandbox Code Playgroud)

我能够购买该项目,它将存储,我可以查询该项目,这也很好.唯一不起作用的是PurchaseFinishedListener.我的编码与示例应用程序非常相似,但它似乎根本没有被调用.

12-12 01:40:47.248: D/IabHelper(23502): Calling getPurchases with continuation token: null
12-12 01:40:50.116: D/IabHelper(23502): Starting async operation: launchPurchaseFlow
Run Code Online (Sandbox Code Playgroud)

这是最后两个被调用的方法,之后当我完成购买时,它不会调用purchasefinishedlistener

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new OnIabPurchaseFinishedListener() {

    @Override
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
        Log.d(TAG, "Purchase finished: " + result + ", purchase: "
                + purchase);
        if (result.isFailure()) {
            complain("Error purchasing: " + result);
            // setWaitScreen(false);
            return;
        }

        if (purchase.getSku().equals(mySku)) {
            Log.d(TAG, "mySku is being consumed.");
            mHelper.consumeAsync(purchase, mConsumeFinishedListener);
        }
        Log.d(TAG, "Purchase successful.");
        new …
Run Code Online (Sandbox Code Playgroud)

android listener in-app-billing

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

在应用计费安全性

我已经完成了在app billing v3中使用的应用程序的开发.我的应用程序是一个考试帮助应用程序,其中包含一系列插入数据库的问题.令我担心的是安全性超越预期,其他几乎没有.我的应用程序查询库存中的已购买商品,因此存储购买不是问题.

因此,第一个问题是有人可以反编译应用程序(我已经完成了),即使使用proguard,您也可以毫不费力地检索所有问题.

接下来是应用程序的公钥.这可以很容易地从我的应用程序中获取,根据开发人员指南,这是我应该保持安全的.

但是我真的不知道如何实现任何形式的安全性.或者甚至我应该走多远才能获得安全保障.没有服务器,如果我将所有内容保留在设备上,我认识到它不会是完美的(远非它),但我至少会喜欢黑客而不是被逗乐.

基本上问题是:

我应该使用什么类型的安全性以及如何使用它?只是指着我一步一步地浏览它的链接,这样我就能理解它会很棒.

非常感谢你!

澄清:

没有涉及服务器.数据存储在应用程序中.当查询库存时(通过queryinventoryasync方法),如果已购买库存,则返回库存,并且每次应用程序启动时都会运行.在应用程序计费本身,我认为是可以的,我要求更多关于我自己的应用程序的应用程序公钥 - 我的意思是以某种方式使复制更难,但目前我已经把它分成15个字符串,我只是"添加"它们在运行时彼此相关,但这几乎没有任何好处,只需将它作为一个字符串.我想以某种方式加密它只是不知道如何.

security android in-app-billing

11
推荐指数
1
解决办法
2597
查看次数

替换片段仍然可见

当我启动我的应用程序时,它会运行一个AsyncTask加载然后进入onPostExecute,然后setContentView进入新布局然后添加一个带有两个按钮的片段,通过添加提供两种模式FragmentTransaction.单击两种模式中的一种后,它会FragmentTransaction使用replace方法将片段替换为另一种模式.

如果应用程序崩溃,它将返回第一个屏幕,加载提供两种模式的两个按钮.在这种情况下,如果选择了任一模式,则加载第二个片段,但现在背景突然透明,显示下面的两个按钮,它们仍然可以点击.如果再次单击它们,它们会正确替换片段,以便在下面看不到它.这很奇怪,我无法理解是什么原因引起的.

我研究并看到了这两个类似的问题,一个两个,这表明它可能是因为ID错误或者我用XML定义了片段.这两个因素都不是这样的.

我的代码如下所示:

下面我更换加载屏幕.

@Override
    protected void onPostExecute(Void result) {
        setContentView(R.layout.activity_main_screen);
        FragmentTransaction transaction = getSupportFragmentManager()
                .beginTransaction();
        transaction.add(R.id.fragment_container, new ModeFragment())
                .commit();
            }
Run Code Online (Sandbox Code Playgroud)

之后,当单击一个按钮时,我将希望替换当前的片段传递给下面的方法:

private void replaceCurrentFragment(Fragment fragment) {
    FragmentTransaction transaction = getSupportFragmentManager()
            .beginTransaction();
    transaction.replace(R.id.fragment_container, fragment)
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
            .addToBackStack(null).commit();
}
Run Code Online (Sandbox Code Playgroud)

这是第一次工作,但是如果发生崩溃,那么应用程序返回到第一个片段,第二次传递此方法时,新的替换片段是半不可见的.单击第一个片段上的按钮再次调用此方法,现在它已经很好了.

显然我不希望应用程序崩溃,所以这不应该发生,但我觉得我的编写代码的方式有问题.

android fragment

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

Android SQLite升级而不会丢失数据

我已经成功创建了一个SQLite数据库,它工作正常.但是,当调用onUpgrade方法时,我希望这样做而不会丢失数据.我正在开发的应用程序是一个测验应用程序.简单地说,当调用onCreate方法时,我使用问题,答案等创建和预填充数据库.最后一列是他们是否将问题设置为收藏夹.我想要做的是,当调用onUpgrade方法时,我想暂时保存那一列,删除整个数据库,使用我对旧问题进行的任何编辑重新创建它,然后重新添加任何新问题. - 回复他们设置为收藏的问题.

所以我试过的一个选项如下:

db.execSQL("ALTER TABLE quiz RENAME TO temp_quiz");
onCreate(db);
db.execSQL("INSERT INTO quiz (favouries) SELECT favourites FROM temp_quiz");
db.execSQL("DROP TABLE IF EXISTS temp_quiz");
Run Code Online (Sandbox Code Playgroud)

但是,由于INSERT INTO只添加新行而不是替换现有行,因此无效.我也尝试过REPLACE INTO,INSERT或REPLACE INTO和

db.execSQL("INSERT INTO quiz (_id, favouries) SELECT _id, favourites FROM temp_quiz");
Run Code Online (Sandbox Code Playgroud)

其中没有用.

目前我确实通过更改表的名称,调用onCreate(db)方法然后设置一个游标来读取每一行并使用db.update()方法来设置它,如下所示:

int place = 1;
int TOTAL_NUMBER_OF_ROWS = 500;

while (place < TOTAL_NUMBER_OF_ROWS) {

String[] columns = new String[] { "_id", ..........., "FAVOURITES" };
// not included all the middle columns

Cursor c = db.query("temp_quiz", columns, "_id=" + place, null, null, …
Run Code Online (Sandbox Code Playgroud)

sqlite android upgrade data-loss

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

在app billing v3中使用NullPointerException

要在Android的app billing v3中测试我实现了一个对话框,它添加了一个选项项适配器.我添加了测试Skus,"android.test.purchased","android.test.canceled","android.test.refunded","android.test.item_unavailable".

当我使用对话框启动购买流程时,一切都很好,我可以购买该商品,并且该商品绝对是购买的.但是,当我的应用程序尝试刷新UI时,我得到nullpointerexception.我知道刷新工作.

这是我的logcat:

12-16 01:06:06.706: I/Running inventory query with(20846): android.test.purchased
12-16 01:06:06.706: I/Running details query with(20846): SkuDetails:{"title":"Sample Title","price":"£0.61","type":"inapp","description":"Sample description for product: android.test.purchased.","productId":"android.test.purchased"}
12-16 01:06:06.706: I/Running details query with(20846): SkuDetails:{"title":"Sample Title","price":"£0.61","type":"inapp","description":"Sample description for product: android.test.purchased.","productId":"android.test.purchased"}
12-16 01:06:06.706: I/Running inventory query with(20846): android.test.canceled
12-16 01:06:06.706: I/Running details query with(20846): null
12-16 01:06:06.706: I/Running details query with(20846): null
12-16 01:06:06.706: D/AndroidRuntime(20846): Shutting down VM
12-16 01:06:06.706: W/dalvikvm(20846): threadid=1: thread exiting with uncaught exception (group=0x40d12930)
12-16 01:06:06.706: E/AndroidRuntime(20846): FATAL EXCEPTION: main
12-16 …
Run Code Online (Sandbox Code Playgroud)

android nullpointerexception in-app-billing

7
推荐指数
2
解决办法
3830
查看次数

自定义Holo按钮

我尝试过搜索和使用其他人在这里发布的自定义选择器,使用设置的颜色过滤器和其他各种东西.我认为我完全错了,因为在完全诚实的情况下,我对刚刚开始开发的设计并不满意,但我仍然不认为按照我所看到的那样做我想做的事情会很复杂:

我开发了一个froyo和up的应用程序.我希望按钮的背景颜色为全局绿色和全息橙色,如Android开发人员网站上的样本.这就是我想要与众不同的一切.当按下holo上的按钮或标准按钮onpress等时,我希望标准的蓝色突出显示在froyo,gingerbread等中的行为.

我真的很感激任何指导.提前谢谢你们!

android button

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

LayoutInflater添加多个视图

对于我的应用程序,我必须动态创建一些带有复选框和textview的水平线性布局.目前我在for循环中动态创建它们.为了性能和易用性,我认为使用layoutinflater将是一种更好的方法,因此使用正确的格式定义一个水平线性布局,然后在某种循环中添加这些,但是我遇到了麻烦.如果有更好的方法来实现我所追求的目标(或者如果我目前的方式确实更好的表现等),我也愿意接受.

//my main layout
LinearLayout main = (LinearLayout) findViewById(R.id.main);
LayoutInflater inflate = getLayoutInflater();
//inflating the layout containing the horizontal
LinearLayout l = (LinearLayout) inflate.inflate(R.layout.inflater, main, false);
//adding the view
main.addView(l);
Run Code Online (Sandbox Code Playgroud)

问题是我不能把它放在任何类型的for循环中.以下是重复addView命令的错误日志.

12-24 19:37:18.668: E/AndroidRuntime(8780): java.lang.RuntimeException: Unable
to start activity ComponentInfo{com.example.test1/com.example.test1.MainActivity}: 
java.lang.IllegalStateException: The specified child already has a 
parent. You must call removeView() on the child's parent first.
Run Code Online (Sandbox Code Playgroud)

我还考虑将布局添加到主线性布局,然后获取它并复制它然后添加更多.你们可以帮我学习怎么做吗?

非常感谢你!

android layout-inflater

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

IMarketBillingService覆盖gen错误

我不知道这是否适合所有人,但更新Eclipse和清理我的项目导致IMarketBillingService出现问题

@Override public android.os.IBinder asBinder()
Run Code Online (Sandbox Code Playgroud)

它要求我删除@Override以及其他几个地方.只是为了帮助那些有同样问题的人我会包括答案,因为目前的答案对我不起作用.

android overriding in-app-billing

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