Java Android:getOutputStream中0x00000000(代码=1)处的致命信号11(SIGSEGV)

Java Android:getOutputStream中0x00000000(代码=1)处的致命信号11(SIGSEGV),java,android,java-7,segmentation-fault,Java,Android,Java 7,Segmentation Fault,更新到jdk 7后,我的应用程序版本开始因此错误而崩溃。没有堆栈跟踪,所以很难找出问题所在 起初我发现它通常意味着OOM,并且与图像相关。毕加索帮助将NetworkImageView更改为ImageView。但现在我在将文件上传到服务器时再次遇到了这个问题 下面是一段代码: conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCache

更新到jdk 7后,我的应用程序版本开始因此错误而崩溃。没有堆栈跟踪,所以很难找出问题所在

起初我发现它通常意味着OOM,并且与图像相关。毕加索帮助将
NetworkImageView
更改为
ImageView
。但现在我在将文件上传到服务器时再次遇到了这个问题

下面是一段代码:

conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");

conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("ENCTYPE", "multipart/form-data");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
conn.setRequestProperty("Cookie", mCookieString);
conn.setRequestProperty("uploaded_file", "image" + mIndex + ".jpg");

OutputStream dos = conn.getOutputStream(); // here is the crash
使用Apache
HttpClient
时,结果是相同的

HttpClient client = new DefaultHttpClient();

MultipartEntity entity = new MultipartEntity();
entity.addPart(new StringPart("type", mImageType.code));
entity.addPart(new FilePart("file",
    readContent(mImagePath.getContentStream()),
    mImagePath.generateFileName(mIndex),
    mImagePath.getContentType()));

HttpPost post = new HttpPost(Api.url(Api.Methods.UPLOAD_IMAGE));
post.addHeader(new BasicHeader("Cookie", mCookieString));
post.setEntity(entity);

try {
    HttpResponse response = client.execute(post); // crash here
    …

} catch (IOException e) {
    …
}
日志:

10-21 21:44:44.793 22098-22193/com.drive2 A/libc﹕ 0x00000000(代码=1)处的致命信号11(SIGSEGV),线程22193(线程-7029)
10-21 21:44:44.843      171-171/? I/DEBUG﹕ *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-21 21:44:44.843      171-171/? I/DEBUG﹕ 构建指纹:“google/occam/mako:4.4.4/KTU84P/1227136:用户/释放密钥”
10-21 21:44:44.843      171-171/? I/DEBUG﹕ 修订:‘11’

10-21 21:44:44.843 171-171/? I/DEBUG﹕ pid:22098,tid:22193,name:Thread-7029>>>com.drive2谢谢@ChrisStratton指点我。这是工作代码。 现在我不明白它以前是怎么工作的

OkHttpClient okHttpClient = new OkHttpClient();
try {
    SSLContext sslContext = SSLContext.getInstance("TLS");
    sslContext.init(null, null, null);
    okHttpClient.setSslSocketFactory(sslContext.getSocketFactory());
} catch (GeneralSecurityException ignored) {
}

// open a URL connection to the Servlet
fileInputStream = mImagePath.getContentStream();
URL url = new URL(Api.url(Api.Methods.UPLOAD_IMAGE));

conn = okHttpClient.open(url); // FIX!!!
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");

我会使用ApacheHTTP客户端进行服务器通信…我已经尝试并得到了相同的结果需要更多关于实际环境的详细信息。你为什么给这个贴标签?这是在Android模拟器中运行的吗?如果它是在Android设备上运行的,那么发布堆栈跟踪。但是,不要以“我的应用程序构建开始崩溃”作为问题的开头,因为这听起来像是构建过程本身(包含在开发机器上运行的大量Java)正在失败。这就是所谓的堆栈跟踪吗?这会有帮助吗?“Swankjesse”似乎在提出您正在使用的代码之前解释了原因:当OkHttp为它自己的SPDY相关的东西启用NPN时,它最终为singleton共享SSL套接字工厂启用NPN。稍后,当HttpURLConnection尝试执行SSL时,它会崩溃,因为NPN在不需要的情况下被启用。OkHttp的一个简单的即时解决方法是将客户端配置为创建自己的SSL上下文,而不是使用系统默认值。”
OkHttpClient okHttpClient = new OkHttpClient();
try {
    SSLContext sslContext = SSLContext.getInstance("TLS");
    sslContext.init(null, null, null);
    okHttpClient.setSslSocketFactory(sslContext.getSocketFactory());
} catch (GeneralSecurityException ignored) {
}

// open a URL connection to the Servlet
fileInputStream = mImagePath.getContentStream();
URL url = new URL(Api.url(Api.Methods.UPLOAD_IMAGE));

conn = okHttpClient.open(url); // FIX!!!
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");