小编Mat*_*nge的帖子

Android中的wifi.getDhcpInfo()返回错误的IP网关

我正在编写一个 Android 应用程序,它需要根据用户的选择连接到不同的 Wifi 网络。我需要从 networkInfo 中检索网关 IP 地址。我面临的问题是,如果我连接到wifi网络配置A,然后想切换到网络配置B,wifi.getDhcpInfo(); 返回网络A的网关IP地址。通过用户界面工作流多次尝试后,最终返回网络B的网关IP。代码片段如下。如何确定新启用的网络何时返回准确的 DHCP 信息以便我能够可靠地获取它的任何想法。例如,是否有我可以捕获的异步事件等。谢谢。

WifiConfiguration config = wifiConfiguredNetworks.get(SSID);
enableNetworkResult = false;
enableNetworkResult = wifi.enableNetwork(config.networkId,true);
if (enableNetworkResult == true) {
    this.networkInfo = wifi.getDhcpInfo(); // does not return proper IP info    
    this.DeviceIP = android.text.format.Formatter.formatIpAddress(networkInfo.gateway);
}
Run Code Online (Sandbox Code Playgroud)

android dhcp wifi

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

在JSF Web应用程序中使用延迟加载时的Hibernate会话处理

和javaworld 开始使用Hibernate教程状态:

一个Session轻量级的实例,创建和销毁成本低廉.这很重要,因为您的应用程序需要始终创建和销毁会话,可能是在每个请求上.Hibernate会话不是线程安全的,并且一次只能由一个线程使用.

由于Tomcat在多个线程中处理HTTP请求,因此在Web应用程序中非常需要线程安全性.因此,我在这个答案中读到:

会话应该是每个方法的局部变量.通过这样做,您的DAO将变为无状态,因此本质上是线程安全的,无需任何同步

让我们在基于JSF的Web应用程序的深度中以这种方式实现它:

private static final SessionFactory sessionFactory;

public Object read(Class c, Integer id){
    try{
        Session session = sessionFactory.openSession();
        return session.get(c, id);
    }finally{
        session.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

当涉及到延迟加载时,你肯定会在几分钟或几小时之后得到一个LazyInitializationException,一些用户交互需要访问存储在用户会话中的对象的延迟加载集合,并且使用上面的代码从Hibernate读取,因为用于加载它的会话很久以前就关闭了.(我不认为在这里作为解决方案避免延迟加载,这是最常提出的.)

继续在这里阅读,我也发现:

您可以使用所有DAO使用同一个会话,在初始化期间打开并在关闭时关闭.请注意,Hibernate Reference提到"每个操作的会话"作为反模式:

"不要使用session-per-operation反模式:不要在单个线程中为每个简单的数据库调用打开和关闭Session."

在我看来,这与上述方向有些矛盾.我必须保持会话开放并重用它,或者不是吗?我假设只是在任何操作的会话上打开会话而从不关闭它们只是意味着实现内存泄漏.在这里使用应用程序范围的会话池可能还不够,因为一个线程可以检出一个会话,而另一个线程可能访问绑定到该会话的延迟加载的集合,并且就是并发问题.

Spring框架中有解决方案,但没有它,并给出了一个长期运行,基于JSF,多线程和多用户的Web应用程序:如何优先管理它?

session jsf multithreading hibernate lazy-loading

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

List <?有好处吗?扩展MyObject>?

鉴于一个简单的课程......

public class Parent {

    private final String value;

    public Parent(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return value;
    }

}
Run Code Online (Sandbox Code Playgroud)

......以及它的子类,......

public class Child extends Parent {
    public Child(String value) {
        super(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

...以下程序编译并执行时没有错误或警告:

public class Main {

    public static void main(String[] args) {
        List<? extends Parent> items = getItems();
        for (Parent p : items) {
            System.out.println(p.toString());
        }
    }

    private static List<? extends Parent> getItems() {
        List<Parent> il = new ArrayList<Parent>();
        il.add(new Parent("Hello")); …
Run Code Online (Sandbox Code Playgroud)

java generics extends

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

用java.lang.Boolean和switch做三元逻辑

java.lang.Boolean非常适合处理三元逻辑,因为它可以完全具有三种状态:Boolean.TRUE(就是这种情况),Boolean.FALSE(事实并非如此)和null(我们不知道)情况如何).使用switch语句处理这个是一个很好的设计,例如.在这个构造函数中:

public class URN {
private String value = null;    

public URN (String value, Boolean mode){
    switch (mode){
        case TRUE:
            if(!isValidURN(value))
                throw new MalformedURLException("The string could not be parsed.");
            this.value = value;
        break;
        case FALSE:
            this.value = value.concat(checkByteFor(value));
        break;
        case null:
            if(isValidURN(value))
                this.value = value;
            else
                this.value = value.concat(checkByteFor(value));
        break;
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,Java不允许这样做,抱怨"无法打开布尔值类型的值".实现这会导致混淆的控制流和unnice代码:

public URN (String value, Boolean mode){
    Boolean valid = null;
    if (!Boolean.FALSE.equals(mode)){
        valid = isValidURN(value);

        if (Boolean.TRUE.equals(mode) && !valid)
                throw new MalformedURLException("The string could not be …
Run Code Online (Sandbox Code Playgroud)

java logic boolean switch-statement

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

如何在C++中定义最终变量(可变常量)?

如何在C++中定义一个指向可变对象的常量?

如果我宣布

static const CMyClass* IMPL;
Run Code Online (Sandbox Code Playgroud)

并指派

const CMyClass* CSomeClass::IMPL = new CMyClass;
Run Code Online (Sandbox Code Playgroud)

那我只能调用const对象上的函数.它的内部是锁定的.这不是我想要的.

如果我放弃const限定符,我可以重新分配指针IMPL,因此它不再被保护为常量,它应该是.final似乎只适用于C++中的函数.final在C++中是否有相当于Java的变量?

c++ final

4
推荐指数
3
解决办法
5260
查看次数

java中的HTTP和HTTPS默认端口号常量

通常,Java 会附带大量要使用的合理常量。IANA 分配的 HTTP 和 HTTPS 默认端口号(80 和 443)将是合理的常量。我检查了 java.net.URL、java.net.HttpURLConnection 和 javax.net.ssl.HttpsURLConnection 的 javadoc,但没有在那里找到它们。这些常量是在 JavaSE 中的某个地方吗?如果没有,它们是否在 Tomcat 上的 Web 应用程序可以访问的类中的某个地方可用,例如 org.apace.catalina 或 coyote?只是因为我不喜欢我的代码中的幻数……

我必须在 URL 组合中这样做吗?

if(port != new URL("http://example.com/").getDefaultPort() &&
        port != new URL("https://example.com/").getDefaultPort()){
    stringBuilder.append(":");
    stringBuilder.append(port);
}
Run Code Online (Sandbox Code Playgroud)

java port constants

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

引用的文件包含错误 (http://java.sun.com/xml/ns/javaee/web-app.xsd)

我在 Eclipse 中遇到了这个错误:

引用的文件包含错误 ( http://java.sun.com/xml/ns/javaee/web-app.xsd )。有关更多信息,请右键单击问题视图中的消息并选择“显示详细信息...”

谁能帮我?什么是问题?提前致谢。我的代码是:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee;http://java.sun.com/xml/ns/javaee/web-app.xsd">

    <!-- The definition of the Root Spring Container shared by all Servlets             and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring/dispatcherServlet/servlet-context.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
Run Code Online (Sandbox Code Playgroud)

java xml eclipse xsd

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

使多个IDE的代码格式化程序产生相同的结果

大多数IDE提供某种代码格式化程序,在按键时将源代码变得非常可读.它们可以或多或少地自由配置,但如果两个代码格式化程序对如何包装或缩进某些代码有不同的看法,则可能会在diff中产生不必要的插入/删除以及合并时出现不必要的问题.

是否有一种已知的方法,例如某些已记录的配置设置,它们导致Eclipse,Netbeans和IntelliJ IDEA的代码格式化程序在某些Java代码上产生相同的结果?

java eclipse netbeans code-formatting intellij-idea

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

正确地将没有定义的结束字符的xml名称空间扩展为有效的URI

据我所知,语义网由URI的三元组组成.命名空间缩写词广泛用于在日常使用中缩写它们.我认为,命名空间短号将通过简单的连接扩展为URI,例如,dc:title众所周知的dc:命名空间中的着名(被定义为http://purl.org/dc/elements/1.1/,注意最后一个字符是a /)将被扩展为,因此在语义上等于http://purl.org/dc/elements/1.1/title.

然后我找到了一些命名空间定义,这些定义在最后缺乏合理的sepraration角色.http://live.dbpedia.org/sparql?nsdecl中的一些示例

以及一些来自最常见的RDF名称空间列表:

如何将这些名称空间扩展为有效的链接数据URI?

XML中的W3C推荐命名空间定义:" 扩展名称是由命名空间名称本地名称组成的对."Fredrik Lundh 在effbot.org上写道:"在元素树中,限定名称在Clark 中存储为通用名称表示法,它将URI和本地部分组合成一个字符串,以"{uri} local"形式给出."这可能适用于各种用例,但它不符合链接数据结构的想法的URI,不能以a开头{.

我本来以为xsd:element应该不会扩大到http://www.w3.org/2001/XMLSchemaelement在链接数据(也不{http://www.w3.org/2001/XMLSchema}element),应该吗?如何正确实施?

xml rdf semantic-web namespaces

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

在英美英语之间转换

我使用Vim编辑我的Latex文件。根据我要参加的会议/期刊,所就读的大学等,我可能希望从英式英语转换为美式英语,反之亦然。有人知道是否有插件可以这样做吗?

vim nlp

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