标签: compatibility

OnGlobalLayoutListener:弃用和兼容性

我必须使用一个OnGlobalLayoutListener对象,然后删除监听器,我有一个问题与我用以下代码解决的弃用方法.

protected void onCreate(Bundle savedInstanceState) {
    final LinearLayout llTotal = (LinearLayout) findViewById(R.id.mmc_ll);
    ViewTreeObserver vto = llTotal.getViewTreeObserver();
    if(vto.isAlive()){
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //
                // mycode
                //
                if (Build.VERSION.SDK_INT<16) {
                    removeLayoutListenerPre16(llTotal.getViewTreeObserver(),this);
                } else {
                    removeLayoutListenerPost16(llTotal.getViewTreeObserver(), this);
                }
            } 
        });
    }
    super.onCreate(savedInstanceState);
}

@SuppressWarnings("deprecation")
private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
    observer.removeGlobalOnLayoutListener(listener);
}

@TargetApi(16)
private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
    observer.removeOnGlobalLayoutListener(listener);
}
Run Code Online (Sandbox Code Playgroud)

这是对的吗?有更好的方法来处理兼容性?

使用API​​ 10在模拟器中运行代码我在LogCat中有以下警告

04-24 09:30:12.565: I/dalvikvm(471): Could not find method android.view.ViewTreeObserver.removeOnGlobalLayoutListener, referenced from method com.my.project.ActivityHome.removeLayoutListenerPost16
04-24 …
Run Code Online (Sandbox Code Playgroud)

compatibility android deprecated

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

IE11中的Angular4应用程序运行问题

我正在使用Angular CLI(1.1.2)构建一个Angular4项目.它在Chrome(版本59.0.3071.115)和firefox(54.0.1)中运行完美,但是当我尝试使用IE11(Verison 11.0.9600.18738)时,nothings出现并且当我在IE中打开开发模式时,它显示以下错误:

SCRIPT5022: Exception thrown and not caught
File: polyfills.bundle.js, Line: 829, Column: 34
Run Code Online (Sandbox Code Playgroud)

详细的错误消息如下:

在此输入图像描述

谁知道如何解决这个问题?

谢谢!

compatibility internet-explorer polyfills angular-cli angular

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

如何将IE11文档模式设置为默认边缘?

我的计算机上安装了Internet Explorer,但需要测试IE 7的兼容模式.将文档模式更改为IE 7后,将其设置为默认值,现在我无法更改它.IE7上的默认设置是什么?

在此输入图像描述

如何设置文档模式默认值?

compatibility internet-explorer ie-developer-tools internet-explorer-11

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

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

如何使iPhone App与多个SDK(固件)版本兼容

随着iOS4即将推出,我已经计划在我的应用程序的未来更新中包含iAd.我认为这将使我的应用程序无法用于固件低于4.0的任何人.有没有办法根据用户的固件更改变量和.xib文件?干杯.

iphone compatibility iphone-sdk-3.0 ios4

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

可以在SQL Server 2012上恢复SQL Server 2014的备份吗?

我知道你不能(至少不容易)在SQL Server 2008上恢复SQL Server 2012备份.但它如何适用于SQL Server 2014到SQL Server 2012?

在数据库级别,可以将兼容性模式调整为任何其他SQL Server版本.

这有什么帮助或工作?它只会禁止2014年的功能吗?

说实话,我已经尝试恢复备份,但2012年没有识别数据文件,所以我无法点击ok Button启动恢复过程.

我错过了一些重要的选择吗?

sql sql-server compatibility sql-server-2012 sql-server-2014

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

Gradle sourceCompatibility对子项目没有影响

我的机器上安装了Java 6和7.Gradle使用1.7(使用检查gradle -v).但我需要编译我的代码以与Java 1.6兼容.据我所知文档,我可以使用该sourceCompatibility属性(并间接targetCompatibility默认为 sourceCompatibility).

所以我将以下行添加到我的构建文件中(在根级别,而不是在任何闭包中):

sourceCompatibility = 1.6
Run Code Online (Sandbox Code Playgroud)

(可以肯定的是,我也在targetCompatibility = 1.6一些试验中添加了,但这不应该有所作为)

要检查结果是否与1.6实际兼容,我将生成的jar解压缩cdWEB-INF/classes文件夹中,并javap -verbose.class我遇到的第一个文件中使用.但无论我是设置目标兼容性还是我使用1.5而不是1.6或者我是否将其指定为string('1.6'),每次javap的结果是

minor version: 0
major version: 51
Run Code Online (Sandbox Code Playgroud)

Afaik这意味着它是Java 1.7字节码,这是错误的.

有什么想法sourceCompatibility- 设置不起作用?或者javap不是检查兼容性的正确方法?

更新: 是的,这实际上是一个多项目构建,但我只检查了一个子项目的构建结果.在这个子项目的构建文件中,我做了上述更改,以确保它们实际应用.另外,我在根项目的构建文件中添加了以下内容(如@Vidya所提议的那样):

allprojects {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}
Run Code Online (Sandbox Code Playgroud)

但这也没有帮助.

更新2: 我在相关的build.gradle文件中使用此代码片段检查了sourceCompatibility的设置:

compileJava.doFirst {
    println "source compatibility " + sourceCompatibility
}
Run Code Online (Sandbox Code Playgroud)

它显示我的sourceCompatibility设置为1.7,虽然我试图将其设置为1.6.当我提取最简单的子项目并自行构建时,sourceCompatibility设置正确,Java Byte代码与1.6兼容.但是,即使这个子项目在多项目构建中使用时也使用了错误的sourceCompatibility.

BTW:我在一些子项目使用的插件是:java,war,jetty,gwt …

java compatibility bytecode gradle

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

编写向后兼容的Android代码

我正在编写一个应用程序,该应用程序使用仅在最新API级别提供的某些功能和类 - 16,但我希望它在API级别为15的设备上运行时没有错误.

让我们举几个例子.一个新类:Android.widget.Advanceable和一个新的/重命名的方法View.setBackground()::

我可以这样做:

Advanceable myAdvanceable = ...;

if (android.os.Build.VERSION.SDK_INT >= 16)
{
    myView.setBackground(...);
    myAdvanceable.advance();
}
else
{
    myView.setBackgroundDrawable(...); // The old function name.
    // Don't bother advancing advanceables.
}
Run Code Online (Sandbox Code Playgroud)

如果我将minSdk设置为15但构建目标为16(即在Project Properties-> Android中),它实际上将编译而没有错误.至少在某些时候.Eclipse对于错误有点随机,并且有时会说"setBackground()仅在API级别> = 16"或类似的情况下可用,但如果我只是清理项目那些错误就会神奇地消失.

所以我的问题是,我被允许这样做吗?如果我在API级别15设备上运行代码,代码是否会崩溃?如果真的到达16代码,它会崩溃吗?Eclipse为什么不阻止我构建它?

编辑1

谢谢你的答案,我想问题应该是:为什么lint不会警告我使用新的API?

我在我的清单中有这个,并且我正在使用API​​级别16的功能,但它仍然没有警告我:

<uses-sdk android:minSdkVersion="15"
    android:targetSdkVersion="16"/>
Run Code Online (Sandbox Code Playgroud)

此外,我仍然不确定整个类何时是API级别的新手,例如Advanceable.具体来说,如果我将它们用作成员变量.

编辑2

答案结果证明是"Eclipse是错误的地狱",但Nico的回答也非常有帮助.

api compatibility android

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

不推荐使用sp_dbcmptlevel后如何检查SQL Server数据库兼容性?

根据BOL(SQL Server Books Online)sp_dbcmptlevel,

将在Microsoft SQL Server的未来版本中删除此功能.请勿在新的开发工作中使用此功能,并尽快修改当前使用此功能的应用程序.请改用ALTER DATABASE兼容级别.

现在,我知道检查数据库兼容性的唯一TSQL方式是通过sp_dbcmptlevel.据我所知,ALTER DATABASE Compatibility Level仅用于设置兼容级别,而不是获取信息.

如何在不使用GUI的情况下获得兼容级别?

t-sql sql-server compatibility

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

开发相同PHP代码的命名空间和非命名空间版本的策略

我正在维护为PHP 5.2编写的库,我想创建它的PHP 5.3命名空间版本.但是,我还会保留非命名空间版本,直到PHP 5.3变得如此陈旧,即使是Debian stable也可以发布它;)

我有相当干净的代码,大约80个类遵循Project_Directory_Filename命名方案(我\Project\Directory\Filename当然会改变它们)和只有少数函数和常量(也以项目名称为前缀).

问题是:并行开发命名空间和非命名空间版本的最佳方法是什么?

  • 我应该只在存储库中创建fork并继续在分支之间合并更改吗?是否存在反斜杠代码难以合并的情况?

  • 我应该编写将5.2版本转换为5.3版本的脚本,反之亦然吗?我应该使用PHP tokenizer吗?sed?C预处理器?

  • 有没有更好的方法在可用的地方使用命名空间并保持与旧PHP的向后兼容性?


更新:毕竟决定不使用命名空间.

php migration compatibility namespaces

49
推荐指数
2
解决办法
3441
查看次数