【发布时间】:2016-11-09 15:02:54
【问题描述】:
目前在我的 android 项目中,我使用 GeneratePresignedUrl 从 Amazon s3 获取私有文件的链接。在它开始提供NetworkOnMainThreadException 之后,它在主线程上运行良好几次。我的问题是GeneratePresignedUrl 需要Asynctask 吗?或者它是一个错误?
Android Aws sdk 版本 2.2.20(新版)。
代码:来自 Util.java
public static URL getSignedUrl(Context context,String imageString){
URL url=null;
try {
System.out.println("Generating pre-signed URL.");
java.util.Date expiration = new java.util.Date();
long milliSeconds = expiration.getTime();
milliSeconds += 1000 * 60 * 60; // Add 1 hour.
expiration.setTime(milliSeconds);
sGenerateSignedUrl = new GeneratePresignedUrlRequest(Constants.BUCKET, imageString);
sGenerateSignedUrl.setMethod(HttpMethod.GET);
sGenerateSignedUrl.setExpiration(expiration);
url = getS3Client(context.getApplicationContext()).generatePresignedUrl(sGenerateSignedUrl);
System.out.println("Pre-Signed URL = " + url.toString());
//if(url!=null)
return url;
}catch (AmazonServiceException exception) {
System.out.println("Caught an AmazonServiceException, " +
"which means your request made it " +
"to Amazon S3, but was rejected with an error response " +
"for some reason.");
System.out.println("Error Message: " + exception.getMessage());
System.out.println("HTTP Code: " + exception.getStatusCode());
System.out.println("AWS Error Code:" + exception.getErrorCode());
System.out.println("Error Type: " + exception.getErrorType());
System.out.println("Request ID: " + exception.getRequestId());
} catch (AmazonClientException ace) {
System.out.println("Caught an AmazonClientException, " +
"which means the client encountered " +
"an internal error while trying to communicate" +
" with S3, " +
"such as not being able to access the network.");
System.out.println("Error Message: " + ace.getMessage());
}
return url;
}
像这样调用上面的方法。
URL url = Util.getSignedUrl(getContext().getApplicationContext(),"image path string");
它运行了 20 多次,效果非常好。后来开始举报NetworkOnMainThreadException。
【问题讨论】:
-
我的解决方案是抓住
NetworkOnMainThreadException。我从 S3 加载一些图像,所以如果它被抛出,我只是抓住它,什么也不做。你的解决方案是什么?
标签: java android amazon-web-services amazon-s3