小编sna*_*ggs的帖子

如何在java中使用Gson库自动将对象列表转换为JSONArray?

可以说我有自定义对象的名单如下:ArrayList<GroupItem>这里GroupItem是一些具有类intString变量.

我到目前为止尝试了Gson库,但这并不是我想要的.

ArrayList<GroupItem> groupsList = /* ... */
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(groupsList, new TypeToken<ArrayList<GroupItem>>() {}.getType());

JsonArray jsonArray = element.getAsJsonArray();
Run Code Online (Sandbox Code Playgroud)

我的目标是以JSONArray某种方式得到(org.Json.JSONArray).有任何想法吗?

[编辑]

我的项目是带有基于API的Cordova的Android org.Json.JSONArray

我想写一些通用的方法将实例转换为JSONArray/JSONObject

谢谢,

java json gson

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

如何在后台iOS中应用时收听日历事件?

我编写了Android应用程序,用于侦听传入的Calendar事件,并在后台应用程序时触发我的流程.

现在我尝试为iOS做同样的事情.

我阅读了很多内容并运行了一些使用EKEventStore后台获取的演示.

然而,这种方法并不能满足我.

还有其他办法吗?

[编辑]

应用程序仅使用公共API.

谢谢,

ios ekeventstore

8
推荐指数
2
解决办法
1649
查看次数

即使列表同步,为什么会出现ConcurrentModificationException?

我有Android多线程应用程序.

两个或更多触发器有可能运行相同的代码部分.

我有一个对象列表.

我让它同步了 Collections.synchronizedList

private List<WmGroupItemSample> mGroupItemSampleList;

mGroupItemSampleList = new ArrayList<WmGroupItemSample>();
mGroupItemSampleList = Collections.synchronizedList(mGroupItemSampleList);
Run Code Online (Sandbox Code Playgroud)

有时我会在线获得Exception:

Collections.sort(mGroupItemSampleList, new GroupItemSampleComparator());
Run Code Online (Sandbox Code Playgroud)
java.util.ConcurrentModificationException
       at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:62)
       at java.util.Collections.sort(Collections.java:1895)
Run Code Online (Sandbox Code Playgroud)
  • 这种流程合法吗?
  • 我是否需要创建副本并在副本上运行排序?
  • 为什么Collections.synchronizedList不阻止此异常?

[编辑]

GroupItemSampleComparator

public class GroupItemSampleComparator implements java.util.Comparator<WmGroupItemSample> {

    public GroupItemSampleComparator() {
        super();        
    }

    public int compare(WmGroupItemSample s1, WmGroupItemSample s2) {
       return ( (s2.getStartDate() - s1.getStartDate()) > 0 ) ? (-1) : (1);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

java concurrentmodification

8
推荐指数
2
解决办法
6035
查看次数

Telnet获取空输出并且没有登录/密码

我尝试编写Swift片段来向Telnet发送命令,但我需要先登录.

在OSX上我生成了一个Telnet服务:launchctl load -F /System/Library/LaunchDaemons/telnet.plist.之后我能够从其他计算机连接到IP:XXX.XXX.X.XXX端口23.

例如,从Windows 7:

telnet XXX.XXX.X.XXX 23
.....
Darwin/BSD (fess.local) (ttys009)

login: snaggs
Password:xxxxxx

snaggs:~ lur$
Run Code Online (Sandbox Code Playgroud)

在命令行中,Telnet要求我输入用户名和密码.之后我可以运行任何Linux命令.到现在为止还挺好.

我为Android编写了Telnet模块,因此OSX Telnet服务正常工作.这意味着我看到login:password:输出所以我能够处理它.

现在我坚持使用iOS Swift,我用Google搜索并找到了非常好的解决方案,应该适用于我的情况:

所以我写了我的家庭作品:

class TelnetClient : NSObject, NSStreamDelegate{

    private var inputStream: NSInputStream!
    private var outputStream: NSOutputStream!


func initNetworkCommunication(){
        let host : CFString = "XXX.XXX.X.XXX"
        let port : UInt32 = 23
        var readstream : Unmanaged<CFReadStream>?
        var writestream : Unmanaged<CFWriteStream>?

        CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, host, port, &readstream, …
Run Code Online (Sandbox Code Playgroud)

telnet ios swift

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

如何使用旧订单ID格式在本地验证Google收据验证?

我想验证Google收据验证,但由于我没有客户端密钥,因此我无法使用Google API:https: //developers.google.com/android-publisher/archive/v1_1/inapppurchases/get

所以我做局部验证通过public key,signedDatasignature.

一切正常,因为我有新orderId的格式:

GPA.XXXX-XXXX-XXXX-XXXXX

但是,此代码不适用于旧模式orderId,如下所示:

4582257046313445026.7467948335710411
Run Code Online (Sandbox Code Playgroud)

我得到例外:

签名异常java.security.SignatureException:签名长度不正确:得到294但是期望256

所以我成功地生成了PublicKeybu失败verify:

sig.verify(Base64.decode(signature, Base64.DEFAULT) // <- java.security.SignatureException
Run Code Online (Sandbox Code Playgroud)

我知道RSA签名应该是256,在我的情况下我得到了294

参考:Google Play订单ID更新为新格式

代码示例

String base64PublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3dkBTr2pD2YSqSK2ewlEWwH9Llu0iA4PkwgVOyNRxOsHfrOlqi0Cm51qdNS0aqh/SMZkuQTAroqH3pAr9gVFOiejKRw+ymTaL5wB9+5n1mAbdeO2tv2FDsbawDvp7u6fIBejYt7Dtmih+kcu707fEO58HZWqgzx9qSHmrkMZr6yvHCtAhdBLwSBBjyhPHy7RAwKA+PE+HYVV2UNb5urqIZ9eI1dAv3RHX/xxHVHRJcjnTyMAqBmfFM+o31tp8/1CxGIazVN6HpVk8Qi2uqSS5HdKUu6VnIK8VuAHQbXQn4bG6GXx5Tp0SX1fKrejo7hupNUCgOlqsYHFYxsRkEOi0QIDAQAB";
String signedData = "{\"orderId\":\"GPA.3353-8027-5082-45637\",\"packageName\":\"com.mycompany.testapp\",\"productId\":\"weekly\",\"purchaseTime\":1503578932746,\"purchaseState\":0,\"developerPayload\":\"1502364785372-5918650324956818356\",\"purchaseToken\":\"bfljoelddlibhbibhnbnflej.AO-J1Oz8pvdqCmzz04OBmegRVKEG1stj4su5HH4uc-gzsz_vlhcz7iB_NUZVBNXp3RlTGyIGnsIgOe6bqvqfUIbPC9_CrCngL0EkZp-SBwaRzfn-EgJ32yQ\",\"autoRenewing\":true}";
String signature = "TyVJfHg8OAoW7W4wuJtS4dM//zmyECiNzWa8wuVrXyDOCPirHqxjpNthq23lmAZlxbTXyMNwedMQPr9R8NJtp3VTzGuNlLYBSOERVehmgstXiiwWDBvTNzgWbwimZmFaIiCExMQiPvbXHoWQh2rClFeAd4FfdC15pNf3NqfOGhUAEmieeb572umOo4YoF0l0421pY/JWYXa+2dtO6pcnSHF6gidRDXR66s/enRZUvkB4x9CEHdA862LDKbwOG4Aihh03IRLjD+m/5WNW+w05Q8bNNA6sCzFGVD+qa3IDiSqkiISCpd3UnufePxf3+O2doWjg2mXC5agEDMnNXvhfrw==";


boolean result = DefaultSignatureValidator.validate(base64PublicKey, signedData, signature); 
Run Code Online (Sandbox Code Playgroud)

DefaultSignatureValidator.class:

public class DefaultSignatureValidator {

        protected static final String KEY_FACTORY_ALGORITHM = "RSA";
        protected static final String SIGNATURE_ALGORITHM = "SHA1withRSA"; …
Run Code Online (Sandbox Code Playgroud)

java android in-app-billing google-play android-pay

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

Google日历小工具:如何从日历中点击的事件中获取UID

这是一个侧栏小工具,可以监听事件点击并返回我的事件信息(更多信息):

<Module>
  <ModulePrefs title="subscribeToEvents Test" height="200" author="me"
    <Optional feature="google.calendar-0.5.read"/>
</ModulePrefs>
  <Content type="html">
  <![CDATA[
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html>
<body>
   <div id="out">No event</div>

<script>

function subscribeEventsCallback(e) {

  var html = 'No event';
  if (e) {
    html = gadgets.json.stringify(e);
  }
  document.getElementById('out').innerHTML = gadgets.util.escapeString(html);
}

///https://www.google.com/calendar/b/1/render?gadgeturl=http://devblog.meeterapp.com/wp-content/uploads/2015/03/fess_subscribe_to_dates.xml#main_7
// The gadget containers request that we do NOT run any JS inline.
// Instead, register a callback handler.
gadgets.util.registerOnLoadHandler(function() {
  google.calendar.read.subscribeToEvents(subscribeEventsCallback);
});


function showEvent(){
    google.calendar.showEvent(localEevent.id);
}

</script>
</body>
</html>
  ]]></Content>
</Module> …
Run Code Online (Sandbox Code Playgroud)

javascript google-calendar-api google-gadget

7
推荐指数
0
解决办法
489
查看次数

如何使用gradle上传多个模块的档案?

我想在maven中发布我的SDK $ ./gradlew uploadArchives

我有这个项目结构:

MyProject

  |_ SDK
     |_ src
         |_ main
              |_ java
                   |_ java files
     |_ build.gradle
  |_ gradle
        |_ gradle-publish.gradle
Run Code Online (Sandbox Code Playgroud)

我使用了以下代码(gradle-publish.gradle)按预期工作:

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

task sourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.sourceFiles
}

uploadArchives {
    repositories {
        mavenDeployer {
         /* ... */
        }
    }
}

artifacts {
    archives sourcesJar
    archives androidJavadocsJar
}
Run Code Online (Sandbox Code Playgroud)

现在我主要分裂模块,2:SDKnew_module所以我的项目结构是这样的:

MyProject

  |_ SDK
     |_ src
         |_ main
              |_ …
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio android-gradle-plugin

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

当我们将它写入HTML角度时,为什么Math.floor什么都不返回?

这是我的HTML:

<div ng-controller = "myCntrl">  
    <pre>floor 1: {{Math.floor( value )  }}</pre>  
    <pre>floor 2: {{value }}</pre>  
    <pre>floor 3: {{value | number : 0 }}</pre>  
    <pre>floor 1 from controller: {{newValue }}</pre>  
</div>
Run Code Online (Sandbox Code Playgroud)

调节器

app.controller('myCntrl', function ($scope) {
    $scope.value = 1233.8435;
    $scope.newValue = Math.floor(1233.8435);    
});
Run Code Online (Sandbox Code Playgroud)

输出:

floor 1: 
floor 2: 1233.8435
floor 3: 1,234
floor 1 from controller: 1233
Run Code Online (Sandbox Code Playgroud)

一般来说,我正在寻找合适的方法1233.

我不想在控制器中调用新方法.

为什么Math.floor没有回报?

谢谢,

演示小提琴

javascript angularjs

6
推荐指数
2
解决办法
9596
查看次数

如何在iOS中加载新生成的私有API头?

我在iOS中是虚拟的,特别是在私有API中.

我有测试应用程序,现在我需要使用私有API(此应用程序不适用于App Store).

我从iOS-Runtime-Headers下载了生成的标题,下一步是什么?

/System/Library/我有包含Frameworks,... 的库列表下PrivateFrameworks.

我是否需要将原始框架替换为我复制的框架iOS-Runtime-Headers

因为我有其他Public API只使用的应用程序,我不想破坏它们.

从发布的链接,他们告诉验证库,例如:

NSBundle *b = [NSBundle 
        bundleWithPath:@"/System/Library/PrivateFrameworks/GAIA.framework"];
BOOL success = [b load];
Run Code Online (Sandbox Code Playgroud)

但这里的路径指向原始路径.

或者我想念一些东西,

谢谢

iphone-privateapi ios

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

使用指令以角度分割控制器逻辑是一种好习惯吗?

我有非常复杂的控制器(约3K行代码)演示仪表板.Controller包含许多图表,网格表等.

例如,我将网格表逻辑移动到下面提到的指令名称wmGridActionItems.注意,它使用父范围:

app.directive('wmGridActionItems', ['$rootScope', '$timeout', function ($rootScope, $timeout) {
        return {
            restrict: 'E',
            templateUrl: 'views/grid-action-items.html',

            link: function (scope, elem, attrs) {

                // logic goes here
         }
        };
    }]);
Run Code Online (Sandbox Code Playgroud)

和HTML:

<div  ui-grid="gridActionItemsOptions"                           
                      ui-grid-auto-resize
                      ui-grid-pagination
                      ui-grid-selection
                      ui-grid-auto-resize
                      ui-grid-resize-columns>
                </div>
Run Code Online (Sandbox Code Playgroud)

所以在控制器HTML中我只写:<wm-grid-action-items></wm-grid-action-items>

我无法在其他地方使用此指令,但至少我将我的BIG控制器划分为几个小指令,这些指令可以帮助我处理仪表板.

我做错了什么?这是好习惯吗?Angular有其他方法可以解决这个问题吗?

编辑

这是我$StateProvider的仪表板视图:

$stateProvider  
 .state('sidemenu.dash', {
                    url: '/dshmngr',
                    abstract: true,
                    views: {
                        'content': {
                            templateUrl: 'views/dashboard/dashboard_manager.html',
                            controller: 'DashboardMngrCtrl'
                        }
                    }


                })

                .state('sidemenu.dash.main', {
                    url: '/main',
                    views: {
                        'content': {
                            templateUrl: 'views/dashboard/dashboard-main.html',
                            controller: 'DashboardNewCtrl'
                        } …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-directive

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