小编Era*_*ran的帖子

如何在不更换先例的情况下使用GCM接收多个通知?

我正在开发一个从GCM服务器接收通知的项目.

我从GCM服务器获得了注册ID,然后将其发送到我的服务器应用程序,并将其保存在数据库中.

我的设备收到消息,但是当我尝试发送另一个消息时,先前的替换.

我知道我们有两种类型的消息:

  • 可折叠的"发送到同步"
  • 不可塌陷

因此,如果不更改消息的名称,如何在不同时间发送两条消息?

更新1:

当我的设备离线时(例如激活机场模式),我尝试从我的应用服务器向Google服务器发送2条消息(我读到Google存储了所有消息).但是当我停用此模式时,我只收到最后发送的消息.

我使用不同的collapse_key作为不同的消息,我收到所有这些(当然,当设备在线时).

有人知道我该如何解决这个问题?

c# android web-services push-notification google-cloud-messaging

20
推荐指数
2
解决办法
1506
查看次数

Java中"if"的奇怪案例

在做某事的时候,我偶然发现了这段代码:

if(true) {
    String message = "Assignment possible";
}

if(true)
    String message = "Time to leave earth";  // error!
Run Code Online (Sandbox Code Playgroud)

为什么在第二种情况下可以在没有括号的情况下在java中写入"if"条件时出现编译错误?

错误消息似乎没有给出正确的信息:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Syntax error, insert ":: IdentifierOrNew" to complete ReferenceExpression
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
Syntax error, insert ";" to complete Statement
String cannot be resolved to a variable
message cannot be resolved to a variable
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗?有人可以解释一下吗?

java if-statement

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

为什么抽象类可以强制覆盖具体方法?

我使用一个库,其中一个抽象类覆盖了一个从Object抽象方法继承的具体方法:

public abstract class A {
    @Override
    public abstract boolean equals(Object obj);
}
Run Code Online (Sandbox Code Playgroud)

要扩展此类,我必须实现该equals方法:

public class B extends A {
    @Override
    public boolean equals(Object obj) {
        return obj != null && obj.getClass() == B.class;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么抽象方法(A::equals)会覆盖具体方法(Object::equals)?我没有看到这个目标.

java abstract-class overriding object

19
推荐指数
3
解决办法
2250
查看次数

Java 8 Stream分组

List<Map<String, String>>列表中的每个项目都是一个地图,例如

companyName - IBM
firstName - James
country - USA
...
Run Code Online (Sandbox Code Playgroud)

我想创建一个Map<String, List<String>>将companyName映射到firstName列表的地方,例如

IBM -> James, Mark
ATT -> Henry, Robert..


private Map<String,List<String>> groupByCompanyName(List<Map<String, String>> list) {
    return list.stream().collect(Collectors.groupingBy(item->item.get("companyName")));
}
Run Code Online (Sandbox Code Playgroud)

但这将创建Map<String, List<Map<String, String>>(将comanyName映射到地图列表)

如何创建Map<String, List<String>>

java lambda java-8

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

什么时候认为Java 8 Stream被消费了?

我的理解是,Stream一旦执行终端操作(例如forEach()或)count(),就认为Java 8 被消耗.

但是,multipleFilters_separate下面的测试用例抛出一个IllegalStateException即使filter是一个懒惰的中间操作,只是作为两个语句调用.然而,我可以将两个过滤操作链接到一个语句中并且它可以工作.

@Test(expected=IllegalStateException.class)
public void multipleFilters_separate() {
    Stream<Double> ints = Stream.of(1.1, 2.2, 3.3);
    ints.filter(d -> d > 1.3);
    ints.filter(d -> d > 2.3).forEach(System.out::println);
}

@Test
public void multipleFilters_piped() {
    Stream<Double> ints = Stream.of(1.1, 2.2, 3.3);
    ints.filter(d -> d > 1.3)
        .filter(d -> d > 2.3)
        .forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)

从这开始,我假设Stream在第一个使用它的语句之后被认为是消耗的,无论该语句是否调用终端操作.听起来不错吗?

java java-8 java-stream

18
推荐指数
2
解决办法
2030
查看次数

新GCM API注册未知源错误

我目前正在构建一个使用新的Google Cloud Messaging系统的应用程序.我在实时环境中设置了一个HTTP客户端服务器,允许我通过我的移动设备进行测试,但是当我尝试向GCM注册时,我不断收到一条IOException,指出gcm.register()接收到未知来源阻止我获取注册ID我需要允许我的服务器向我的设备发送消息.

我已经多次检查过我的发件人ID是否错误,我已检查过我的清单,看看我是否也有错误,我似乎无法找到问题.环顾四周也没有为我的问题提供任何答案.

这是我的日志:

07-18 11:34:25.487: W/System.err(3093): java.io.IOException: MAIN_THREAD
07-18 11:34:25.497: W/System.err(3093):     at com.google.android.gms.gcm.GoogleCloudMessaging.register(Unknown Source)
07-18 11:34:25.497: W/System.err(3093):     at koodoo.pushtest.MainActivity.onCreate(MainActivity.java:94)
07-18 11:34:25.497: W/System.err(3093):     at android.app.Activity.performCreate(Activity.java:4492)
07-18 11:34:25.497: W/System.err(3093):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
07-18 11:34:25.497: W/System.err(3093):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
07-18 11:34:25.497: W/System.err(3093):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
07-18 11:34:25.497: W/System.err(3093):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
07-18 11:34:25.497: W/System.err(3093):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
07-18 11:34:25.497: W/System.err(3093):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-18 11:34:25.497: W/System.err(3093):     at android.os.Looper.loop(Looper.java:137)
07-18 11:34:25.497: W/System.err(3093):     at android.app.ActivityThread.main(ActivityThread.java:4424)
07-18 11:34:25.497: W/System.err(3093):     at java.lang.reflect.Method.invokeNative(Native Method)
07-18 11:34:25.497: W/System.err(3093):     at java.lang.reflect.Method.invoke(Method.java:511)
07-18 …
Run Code Online (Sandbox Code Playgroud)

android ioexception push-notification google-cloud-messaging

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

Google Cloud Messaging - CCS(XMPP)与HTTP服务器

我已阅读文档 https://developer.android.com/google/gcm/index.html

我能看到的唯一区别是基于CCS(XMPP)的服务器允许在Android设备和GCM服务器之间直接进行双向通信.

是否有任何其他原因可以选择通过HTTP选择CCS(XMPP),反之亦然?

android push-notification google-cloud-messaging

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

Java Lambda方法引用不起作用

我的原始代码是这样的:

private static void onClicked(MouseEvent event) {
    // code to execute
}

// somewhere else in the program:
setOnMouseClicked(event -> SomeClass.onClicked(event));
Run Code Online (Sandbox Code Playgroud)

但IntelliJ说"可以用方法参考替换",我不太清楚该怎么做.我以为我会这样做:

setOnMouseClicked(event -> SomeClass::onClicked);
Run Code Online (Sandbox Code Playgroud)

但后来告诉我"虚空不是一个功能界面",但我不想返回任何东西.我只想要执行处理程序.我怎样才能解决这个问题?

谢谢!

java lambda intellij-idea java-8 method-reference

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

lambda可以访问其目标功能接口的成员吗?

我用java8创建了一个简单的接口.因为它包含一个方法和一个默认方法.

interface Lambda{

default void dummy(){
    System.out.println("Call this..");
}

void yummy();
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用历史方式这两种方法

public class DefaultCheck {

public static void main(String[] args) {

    DefaultCheck check = new DefaultCheck();
    check.activate(new Lambda() {

        @Override
        public void yummy() {
            dummy();
        }
    });

}

void activate(Lambda lambda){
    lambda.yummy();
}
Run Code Online (Sandbox Code Playgroud)

}

现在我正在尝试使用lambda表达式实现相同的东西,得到像"dummy is undefined"这样的错误

check.activate(() -> {
        dummy();
    });
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议,如何使用Lambda表达式实现这个场景?

java lambda java-8

16
推荐指数
2
解决办法
1426
查看次数

通过使用java 8流对集合进行排序,将集合转换为Map

我有一个列表,我需要自定义排序,然后转换为具有其Id与名称映射的地图.

这是我的代码:

Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));
Run Code Online (Sandbox Code Playgroud)

我认为这将完成这项工作,但我想知道我是否可以避免LinkedHashMap在这里创建并使用花哨的函数式编程来完成一行中的工作.

java collections linkedhashmap java-8

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