我正在开发一个从GCM服务器接收通知的项目.
我从GCM服务器获得了注册ID,然后将其发送到我的服务器应用程序,并将其保存在数据库中.
我的设备收到消息,但是当我尝试发送另一个消息时,先前的替换.
我知道我们有两种类型的消息:
因此,如果不更改消息的名称,如何在不同时间发送两条消息?
更新1:
当我的设备离线时(例如激活机场模式),我尝试从我的应用服务器向Google服务器发送2条消息(我读到Google存储了所有消息).但是当我停用此模式时,我只收到最后发送的消息.
我使用不同的collapse_key作为不同的消息,我收到所有这些(当然,当设备在线时).
有人知道我该如何解决这个问题?
c# android web-services push-notification google-cloud-messaging
在做某事的时候,我偶然发现了这段代码:
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)
我错过了一些明显的东西吗?有人可以解释一下吗?
我使用一个库,其中一个抽象类覆盖了一个从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)?我没有看到这个目标.
我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>>?
我的理解是,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在第一个使用它的语句之后被认为是消耗的,无论该语句是否调用终端操作.听起来不错吗?
我目前正在构建一个使用新的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
我已阅读文档 https://developer.android.com/google/gcm/index.html
我能看到的唯一区别是基于CCS(XMPP)的服务器允许在Android设备和GCM服务器之间直接进行双向通信.
是否有任何其他原因可以选择通过HTTP选择CCS(XMPP),反之亦然?
我的原始代码是这样的:
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)
但后来告诉我"虚空不是一个功能界面",但我不想返回任何东西.我只想要执行处理程序.我怎样才能解决这个问题?
谢谢!
我用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表达式实现这个场景?
我有一个列表,我需要自定义排序,然后转换为具有其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 ×7
java-8 ×5
android ×3
lambda ×3
c# ×1
collections ×1
if-statement ×1
ioexception ×1
java-stream ×1
object ×1
overriding ×1
web-services ×1