小编Spr*_*ose的帖子

使用Java API的服务帐户验证Google API

我正在尝试使用oauth API通过Java API对Google服务帐户进行身份验证.我希望用它来访问Google Bigquery.我从API请求中返回"无效授权".

以下是代码,它是基本身份验证示例的副本(不适用于Bigquery ..而是另一个Google API):

  /** Global instance of the HTTP transport. */
  private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  /** Global instance of the JSON factory. */
  private static final JsonFactory JSON_FACTORY = new JacksonFactory();

  private static Bigquery bigquery;  

public ServiceAccountExample() {

      try {
          try {

            GoogleCredential credential = new  GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                .setServiceAccountScopes(BigqueryScopes.BIGQUERY)
                .setServiceAccountPrivateKeyFromP12File(new File("GoogleBigQuery-privatekey.p12"))
                //.setRefreshListeners(refreshListeners)
                //.setServiceAccountUser("email.com")
                .build();


            credential.refreshToken();

            bigquery = new Bigquery.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
                        //.setApplicationName("GoogleBigQuery/1.0")
                        .build();

            listDatasets(bigquery, "publicdata");

            return;
          } catch (IOException e) { …
Run Code Online (Sandbox Code Playgroud)

java oauth-2.0 google-bigquery

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

通过多个字段对Java bean进行排序的正确方法

我们的代码包含复杂的Comparators,用于在整个应用程序中对java对象进行排序.从历史上看,这些都有效,但自从Java 7中引入TimSort以来,我们偶尔会发现比较方法违反了它的一般合同!错误..取决于对象中保存的数据.

这是我们的一个传统比较器的例子(可能差不多十年之久 - 原谅狡猾):

 public int compare(TemplateBean b1, TemplateBean b2) {

  // avoid null pointer exceptions
  if (b1 == null && b2 == null) return 0;
  if (b1 == null) return 1;
  if (b2 == null) return -1;

  int cmp = 0;
  if ("UNATTACHED".equals(b1.getStatusCode()) &&
     !"UNATTACHED".equals(b2.getStatusCode())) {
     cmp = 1;
  }
  if (!"UNATTACHED".equals(b1.getStatusCode()) &&
     "UNATTACHED".equals(b2.getStatusCode())) {
     cmp = -1;
  }
  if (!"UNATTACHED".equals(b1.getStatusCode()) &&
     !"UNATTACHED".equals(b2.getStatusCode()) &&
     !"FIELDSIMPLE".equals(b1.getRefRltshpTypeCode()) &&
     !"FIELDSIMPLE".equals(b2.getRefRltshpTypeCode()) &&
     !"CUSTOM".equals(b1.getRefRltshpTypeCode()) &&
     !"CUSTOM".equals(b2.getRefRltshpTypeCode()) &&
     !"FUNCTION".equals(b1.getRefRltshpTypeCode()) &&
     !"FUNCTION".equals(b2.getRefRltshpTypeCode())) { …
Run Code Online (Sandbox Code Playgroud)

java sorting comparator

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

在Android设备上运行时,FontMetrics不正确.模拟器很好

我有一个Android应用程序,根据Android设备的分辨率动态缩放文本.我已经在Android模拟器中的所有预定义分辨率上测试了此代码,我的代码运行正常.(这包括与HTC Desire和Motorola Droid相同的分辨率)

它也适用于我的HTC Wildfire.

以下是模拟器的一些屏幕截图:

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

但是......我在HTC Desire上尝试了这个,我收到了使用Motorola Droid的用户报告,这些字体没有正确缩放:

在此输入图像描述

请注意它是如何切断文本的.

任何想法为什么这不适用于这些特定的设备?

我目前有一个函数可以根据文本的可用高度缩小文本...这样的事情:

public static float calculateHeight(FontMetrics fm) {

    return Math.abs(fm.ascent) + fm.descent;

}


public static int determineTextSize(Typeface font, float allowableHeight) {

    Paint p = new Paint();
    p.setTypeface(font);

    int size = (int) allowableHeight;
    p.setTextSize(size);

    float currentHeight = calculateHeight(p.getFontMetrics());

    while (size!=0 && (currentHeight) > allowableHeight) {
            p.setTextSize(size--);
        currentHeight = calculateHeight(p.getFontMetrics());
    }

    if (size==0) {
        System.out.print("Using Allowable Height!!");
        return (int) allowableHeight;
    }

    System.out.print("Using size " + size);
    return size;
}
Run Code Online (Sandbox Code Playgroud)

任何想法为什么只在几个设备上发生这种情况?以及如何解决它?还有其他字体指标,而不是我需要考虑的,我不知道吗?像Scale还是DPI?

谢谢.

java android fontmetrics

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