小编Wil*_*iam的帖子

应使用哪些用户身份来整理Google Play中的应用内购买?

在Google Play中使用应用内结算时,您会收到包含有关购买信息的PURCHASE_STATE_CHANGED广播意图.那时候你

  1. 验证购买(可能在您自己的服务器上)
  2. 记录购买(如果是非托管项目,几乎可以肯定在您自己的服务器上)
  3. 更新您的应用以反映购买

我的问题是:在您自己的服务器上记录购买时,应该使用哪种用户身份来整理非托管项目的多次购买(和使用)?你如何在Android上获得这个身份?

注意,身份不能是设备特定的,因为用户可能有多个设备.它需要与用于购买的Google Play帐户相关联.从Google Play返回的意图中的数据似乎不包含任何用户身份(混淆或未混淆).

我正在寻找在Android上找到Google Play身份的地点/方式以及如何将其发送到AppEngine的立场.

android in-app-purchase in-app-billing google-play

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

如何使用GoogleApiClient为云端点客户端提供凭据

好的,使用Google Play服务的GoogleApiClient,我让用户选择一个帐户(如果有多个帐户)并确认我的Android应用程序的oauth权限.我需要这个用于排行榜和其他一些事情.

但我也在使用AppEngine后端,需要使用它来验证用户身份.为此,我需要传入要进行身份验证的emailAccount.

在集成Google Play服务之前,我手动处理了帐户选择,因此我始终可以访问用户选择的emailAccount.但GoogleApiClient处理这个问题.

private void signInToGoogleAccount() {
    googleApiClient = new GoogleApiClient.Builder(this)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .addApi(Plus.API)
        .addScope(Plus.SCOPE_PLUS_LOGIN) // Profile + Circles + ?writing app activities?
        .build();
    googleApiClient.connect();
}

// GPS Connection Callbacks.

@Override
public void onConnected(Bundle bundle) {
    Log.i(TAG, "#onConnected - GoogleApiClient connected!!");
    if (Plus.PeopleApi.getCurrentPerson(googleApiClient) != null) {
        final Person currentPerson = Plus.PeopleApi.getCurrentPerson(googleApiClient);
        String personName = currentPerson.getDisplayName();
        Log.i(TAG, "name=" + personName);
        String personGooglePlusProfile = currentPerson.getUrl();
        Log.i(TAG, "profileUrl=" + personGooglePlusProfile);
    }
}

@Override
public void onConnectionSuspended(int cause) {
    Log.d(TAG, "#onConnectionSuspended - …
Run Code Online (Sandbox Code Playgroud)

android google-cloud-endpoints google-play-services google-oauth

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

如何在Maven"AbstractMojoTestCase"中填充参数"defaultValue"?

我有一个Maven插件,我试图使用的子类测试AbstractMojoTestCase.该插件使用a Mojo定义outputFolder参数defaultValue.通常不期望用户在POM中提供该参数.

@Parameter(defaultValue = "${project.build.directory}/someOutputFolder")
private File outputFolder;
Run Code Online (Sandbox Code Playgroud)

如果我在真实场景中使用插件,那么outputFolder将按预期进行默认.

但是,如果我测试Mojo使用,AbstractMojoTestCase那么在填充测试POM中定义的参数时defaultValue,不会填充具有未在POM中定义的参数.

public class MyPluginTestCase extends AbstractMojoTestCase {

    public void testAssembly() throws Exception {
        final File pom = getTestFile( "src/test/resources/test-pom.xml");
        assertNotNull(pom);
        assertTrue(pom.exists());

        final MyMojo myMojo = (BaselineAssemblyMojo) lookupMojo("assemble", pom);
        assertNotNull(myMojo);
        myMojo.execute(); // Dies due to NullPointerException on outputFolder.
    }
}
Run Code Online (Sandbox Code Playgroud)

进一步:如果我outputFolder在POM中定义参数如下:

<outputFolder>${project.build.directory}/someOutputFolder</outputFolder>
Run Code Online (Sandbox Code Playgroud)

那么${project.build.directory}不是在AbstractMojoTestCase内解决.

那么在测试时我需要做什么才能填充defaultvalue?

或者这是一个错误AbstractMojoTestCase

这是Maven-3.2.3,maven-plugin-plugin-3.2,JDK 8

maven-plugin maven-3

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

根据文本大小自动调整JTable列的大小

我有一个JTable,其中一些字段长文本,一些字段很少.

默认情况下,它的外观如下:

在此输入图像描述

请注意如何缩短"名称"和"标题"行.

我想知道两件事:

  1. 如何手动设置标题的宽度(如姓名,标题,姓氏)
  2. 如何根据文本自动调整所有这些大小.

这是代码:

    String[] columnNames = {"Name", "Title", "Surname", "ID"};
    Object[][] testData = {
            {"John", "Mr.", "Doe", "61020384U"},
    };

    nameTable = new JTable(testData, columnNames);
    nameTable.setFont(new Font("Tahoma", Font.PLAIN, 11));
    window.add(new JScrollPane(nameTable));
Run Code Online (Sandbox Code Playgroud)

我看过Swing教程,但我要么错过了一些东西,要么就是不存在.

java swing jtable

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

AdMob findViewById返回null

我正在尝试在第一个Android项目中配置AdMod。当我尝试运行该应用程序时,findViewByID始终返回null。

这是我主要活动的代码:

import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.view.Window;


   import android.view.WindowManager;

public abstract class MyAndroidApp extends Activity {
    AdView adView;
    public static final  String MY_PUBLISHER_ID = "***********";

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    AdRequest adRequest = new AdRequest();
    adRequest.addTestDevice(AdRequest.TEST_EMULATOR);
    adView = new AdView(this, AdSize.BANNER, MY_PUBLISHER_ID);

    //R.id.main has value, I can see it in Eclipse
    RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main);


    if ( mainLayout == null )
        Log.d("Error","Layout is null"); …
Run Code Online (Sandbox Code Playgroud)

android

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

如何重命名数据存储实体字段但能够通过新旧属性名称检索记录?

我有一个实体

class Foo {
  public String bar;
}
Run Code Online (Sandbox Code Playgroud)

我想将“bar”重命名为“somethingElse”。并计划使用 Objectify 的 @AlsoLoad 注释来实现这一目标(我已经在使用 Objectify 进行持久化)。所以像这样:

class Foo {
  @AlsoLoad("bar")
  public String somethingElse;
}
Run Code Online (Sandbox Code Playgroud)

但任何形式的查询:

final Query<Foo> query = OfyService.ofy().load().type(Foo.class)
    .filter("somethingElse", "someValue");
Run Code Online (Sandbox Code Playgroud)

仅检索自重命名以来已保存的实体。任何较旧的实体都将被忽略。

重命名实体字段以便我可以通过单个查询返回所有记录的最佳实践是什么?

google-app-engine objectify google-cloud-datastore

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

如何将void*转换为函数指针?

我在FreeRTOS中使用xTaskCreate,其第四个参数(void*const)是传递给新线程调用的函数的参数.

void __connect_to_foo(void * const task_params) {
   void (*on_connected)(void);
   on_connected = (void) (*task_params);
   on_connected();
}

void connect_to_foo(void (*on_connected)(void)) {
   // Start thread
   xTaskCreate(
         &__connect_to_foo,
         "ConnectTask",
         STACK_SIZE,
         (void*) on_connected, // params
         TASK_PRIORITY,
         NULL // Handle to the created Task - we don't need it.
         );
}
Run Code Online (Sandbox Code Playgroud)

我需要能够传入一个带签名的函数指针

void bar();

但我无法弄清楚如何将void*转换为我可以调用的函数指针.我能得到的最近的是:

错误:'void*'不是第3行的指针对象类型

如何将task_params转换为我可以调用的函数指针?

注意,上面的代码大大简化了.

c++ function-pointers freertos

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