我看过很多关于SSL错误的帖子和信息,我自己偶然发现了一个.
我试图通过带有GlobalSign CA BE证书的Android WebView访问网页,我收到了一个不可信的错误.
对于大多数手机来说,它可以正常处理这个,并告诉处理程序继续.
但是,有些手机最终会在webview-client中收到onReceivedError,告诉它无法与服务器建立联系.这是在经历了onReceivedSslError并继续进行之后发生的.
我搜索了描述并找到了很多涉及HttpClient的描述,并且要么安装自己的证书,要么只是欺骗它接受所有.
但是,由于我使用的是WebView,我以为我会使用WebView.setCertificate(SslCertificate crt).我搜索了这个函数的讨论,但没有找到太多/任何信息.
我拿到了据说不受信任的证书,并执行了以下代码:
try{
Certificate myCert = CertificateFactory.getInstance("X509").
generateCertificate(this.getResources().
openRawResource(R.raw.globalsign_ca_be));
X509Certificate x509 = (X509Certificate) myCert;
SslCertificate sslCert = new SslCertificate(x509);
webView.setCertificate(sslCert);
}
catch (CertificateException ex){
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
使用包含以下内容的.cer文件:
----- BEGIN CERTIFICATE ----- MIIEbjCCA1agAwIBAgILBAAAAAABElatYgQwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA1MDQxMDAw MDBaFw0xNDAxMjcxMTAwMDBaMHExCzAJBgNVBAYTAkJFMR0wGwYDVQQLExREb21h aW4gVmFsaWRhdGlvbiBDQTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYG A1UEAxMfR2xvYmFsU2lnbiBEb21haW4gVmFsaWRhdGlvbiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALSfSeaznwFVNtA2lWzLFlpscrXineL6OekK 3HNcoDt2bQUokw2lQvPoy + 7TMxoTJwrfXNFUYmqaFzbWPFiHHrJmH1VpK4lWR7TC UAzlXcH9KRtmc0P0b9EUTyptSFI69eSQP96y9BDV + fqslg0QMiPS01GnlYVQ + G8P naeITg0xm0RBjkEvbpoatLalWfFJWQl + fknTaTNLAJLFG0Igafhk39inRNGQXv05 rWt9/tWLpAFk9qe0IITMBS8n7h7VJJauhEOkPkPzO5nX + fLePRnt0GXxScpI0jh9 xkjXcmG4xsJnCthlWv1b88X9voxpz5kgtursOYDpZqjuPZ1Ge4cCAwEAAaOCAR8w ggEbMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMEsGA1UdIARE MEIwQAYJKwYBBAGgMgEKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2xvYmFs c2lnbi5uZXQvcmVwb3NpdG9yeS8wHQYDVR0OBBYEFDYSTp5xxCZB8frxKUy/F6 RT KLbrMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQv cm9vdC5jcmwwEQYJYIZIAYb4QgEBBAQDAgIEMCAGA1UdJQQZMBcGCisGAQQBgjcK AwMGCWCGSAGG + EIEATAfBgNVHSMEGDAWgBRge2YaRQ2XyolQL30EzTSo // z9SzAN BgkqhkiG9w0BAQUFAAOCAQEAwyV5SvrNJm9AariUG + ag4WvSMZo/ifvFCiJ1ev27 QDScvJ6FSVl6lcwNLUQLx8sVEB7S3ON46l/1NVGmyD85kBWeXxXJt49da2OZaOFu XPydNzMKrodwSqLjqyZ9cwfk9wqqdY + m7psE0QVDdBq61MKdf7egbO0WmmdAVquD …
我有一个自定义listView,其中包含一个固定标题和x个"俯卧撑"视图,可以向上推并隐藏在列表视图上方.
我附上图片来解释它们.对不起"黑色审查",只是为了隐藏客户的标识等.
我的问题是,如果我在固定的标题视图中添加填充,我将在它后面浮动listview项.
如果您搜索PinnedHeaderListView,即列表视图中的静态视图和标题,则使用与您将找到的相同技术实现固定标题视图.
我找到了一种方法来启用填充,即通过将固定标头应用相同的填充到实际的listView,但只有当静态标头可见时.
但是,调用setPadding会导致一个非常明显的Jank,我想删除它.有谁知道如何删除这个jank?
我有一个简单的视图和虚拟数据的简单应用程序,它没有显示这个jank,所以可能jank的数量取决于单元格布局的复杂性.
private void updateIfShouldShowStaticHeaderView() {
//unfortunately setting the padding of the listView causes JANK.
//any ideas?
int bottomOfFloatingHeader = floatingHeader.getBottom();
if (bottomOfFloatingHeader < mHeaderViewHeight) {
staticHeaderViewIsVisible = true;
staticHeader.setVisibility(View.VISIBLE);
//need to set padding of listView to avoid having list-view items float behind my padded static header
setPadding(0, staticHeader.getPaddingTop(), 0, getPaddingBottom());
} else {
staticHeaderViewIsVisible = false;
staticHeader.setVisibility(View.INVISIBLE);
//need to set padding of listView to avoid having list-view items float behind my padded static header …Run Code Online (Sandbox Code Playgroud) 我有一个带按钮,图像和webview的活动.我的目标是加载页面,然后在其上执行javascript以使用HTML5等绘制图形.
html5绘制的图像高度未知/可变,但宽度应始终与手机的宽度/或浏览器窗口相同.
我有一个javascript界面来获取一个包含信息的回调,它现在已经完成了调用绘图功能,它给了我高度.
这是Web视图的设置
mWeb = (WebView) findViewById(R.id.webView1);
mWeb.clearCache(true);
mWeb.addJavascriptInterface(new IJavascriptHandler(), "cpjs");
mWeb.getSettings().setJavaScriptEnabled(true);
mWeb.loadUrl(" http://theURL.com ");
mWeb.setInitialScale(100);
mWeb.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
mWeb.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url){
mWidth = mWeb.getWidth();
mHeight = mWeb.getHeight();
view.loadUrl("javascript: Tools.adjustWidth(" + mWidth + " )");
String javaCouponRender = "renderCoupon(" + kupongJson + ", 0); void(0)";
view.loadUrl("javascript: " + javaCouponRender);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我在视图中的按钮,我已经习惯使用此功能将我的webview渲染为纹理:
void renderCoupon(int width,int height){
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas c =new Canvas(bitmap);
mWeb.draw(c);
imgView.setMinimumWidth(width);
imgView.setMinimumHeight(height);
imgView.setImageBitmap(bitmap);
imgView.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)
这有效.按下按钮,将绘制的内容呈现给纹理,并且imageview具有正确的结果.唯一的cavaet是我必须等到页面加载/绘制之后按下按钮.
现在,我已经实现了从javascript中得到的回调,如下所示: …
我遇到了与此问题相同的问题:使用ant与库项目进行Android单元测试
我尝试了问题中提出的两种方法,但是在Android工具的r18版本中,我得到了:
NTServicesTest/build.xml:110: Reference jar.libs.ref not found.
Run Code Online (Sandbox Code Playgroud)
我不确定是不是我没有按照原始问题的答案的解决方法的配方,或者如果在Android工具的r18中的某些内容发生了变化.
我的文件夹设置在包含..的proj文件夹中:
NTServices,NTServicesTest,NTServicesTestApp
对于@Snicolas的解决方法,我修改了我的NTServicesTest/project.properties,如下所示:
# Project target.
target=android-15
tested.android.library.reference.1=../NTServices
Run Code Online (Sandbox Code Playgroud)
我的NTServicesTest/build.xml看起来像这样:(从版本标签的右下方)
<import file="${sdk.dir}/tools/ant/build.xml" />
<!-- override "compile" target in platform android_rules.xml to include tested app's external libraries -->
<!-- Compiles this project's .java files into .class files. -->
<target name="-compile" depends="-build-setup, -pre-build, -code-gen, -pre-compile">
<do-only-if-manifest-hasCode elseText="hasCode = false. Skipping...">
<!-- If android rules are used for a test project, its classpath should include
tested project's location -->
<condition property="extensible.classpath"
value="${tested.project.absolute.dir}/bin/classes"
else=".">
<isset property="tested.project.absolute.dir" …Run Code Online (Sandbox Code Playgroud) android ×4
webview ×2
ant ×1
certificate ×1
html5 ×1
javascript ×1
lag ×1
listview ×1
ssl ×1
unit-testing ×1