gpt4 book ai didi

java - Amazon 的适用于 Android 的 AWS Mobile SDK 及其 S3 上传实用程序未报告任何错误,知道为什么吗?

转载 作者:行者123 更新时间:2023-11-29 19:50:03 26 4
gpt4 key购买 nike

我在使用 AWS Mobile SDK version 2.2.15 时遇到了问题.自己仔细看了之后S3TransferUtilitySample , 我已经尝试了几次自己将文件上传到 Amazon S3 存储桶。

的我的第一次尝试是尝试从 Android 自己的 AsyncTask 中的 doInBackground() 方法中调用 TransferUtility 的 .upload() 方法。那里没有成功,在reading about this issue之后,它启发我尝试将 SDK 调用移出 AsyncTask 并移入 onPostExecute() 下的 UI 线程,因为我怀疑调用本身是异步的并且 AsyncTask 正在 AWS SDK 对象上运行垃圾回收.仍然不走运,没有抛出异常,除了文件没有真正上传之外没有任何问题的迹象。

的我的第二次尝试是在 this exact example 之后.我下载了源代码并能够为应用程序提供正确的身份池 ID、区域、存储桶、 key 和测试 jpeg 文件。我运行了该应用程序,并且正在调用电话。该文件毫无问题地传送到了 AWS S3。

的我将它们的确切方法复制到我的应用程序的辅助类中,并将所有 AWS SDK 对象设为该类的静态字段,但我仍然遇到同样的问题,即没有抛出异常。我最终使这些字段成为非静态的,并在我的主要 Activity 中将辅助类实例化为一个对象,安全地假设该对象不会被垃圾收集处理。依然没有!这些调用没有失败的迹象!

的我决定非常慷慨地使用 Android 的 Log.i() 方法进行日志记录,观察每一步,它甚至进入了 TransferUtility 的 .upload()方法,但即使设置了 TransferListener 并充满了日志行,也没有状态变化,onError() 没有被调用。 TransferUtility 的 .upload() 及其生成的 TransferObserver 对象没有像运行测试应用程序那样报告任何内容。

的以下是一些需要注意的事项:
* 此处使用了正确的身份池 ID,没有问题
* 我试过同时使用 2.2.15 和 2.2.13 版本
* 包含的所有依赖项都是 .jar 文件,项目不是 Gradle(还)
* 服务在 list 中声明,就像在示例中一样
* 没有构建错误,Android Studio 可以很好地构建项目
* TransferListener 对象未触发 onStateChanged()onProgressChanged()onError()

的有没有人遇到过 AWS S3 SDK 这样奇怪的问题?关于如何更好地调试此问题有什么建议吗?

这是现在的类(class):

public class AmazonS3Helper
{
Context context;

public String bucket;
public String key;

public File file;

public AmazonS3 s3;
public TransferUtility utility;

public AmazonS3Helper(JSONObject p, Context c)
{
Log.i("tag", "new AmazonS3Helper object");

this.context = c;

try
{
bucket = p.getString("bucket");
key = p.getString("key");


this.file = new File(
c.getExternalFilesDir(null),
"nn_temp_photo.jpg");

credentialsProvider();
setTransferUtility();

upload();
}
catch (Exception x)
{
Log.i("tag", "Error in new AmazonS3Helper object: " + x.getMessage());
}
}

public void credentialsProvider()
{
Log.i("tag", "Providing credentials");

try
{
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
this.context,
// This has been verified to return the correct identity pool
MyApplicationClass.getPreference("aws.credentials"),
Regions.US_EAST_1);

setAmazonS3Client(credentialsProvider);
}
catch (Exception x)
{
Log.i("tag", "Error in providing credentials: " + x.getMessage());
}
}

public void setAmazonS3Client(CognitoCachingCredentialsProvider credentialsProvider)
{
Log.i("tag", "Setting amazon s3 client");

try
{
s3 = new AmazonS3Client(credentialsProvider);
s3.setRegion(Region.getRegion(Regions.US_EAST_1));
}
catch (Exception x)
{
Log.i("tag", "Error in setting amazon s3 client:" + x.getMessage());
}
}

public void setTransferUtility()
{
Log.i("tag", "Setting transfer utility");

try
{
utility =
new TransferUtility(
s3,
this.context);
}
catch (Exception x)
{
Log.i("tag", "Error in setting transfer utility: " + x.getMessage());
}
}

public void upload()
{
Log.i("tag", "uploading");

try
{
TransferObserver transferObserver = utility.upload(
bucket,
key,
file
);

transferObserverListener(transferObserver);
}
catch (Exception x)
{
Log.i("tag", "Error in uploading: " + x.getMessage());
}
}

public void transferObserverListener(TransferObserver transferObserver)
{
Log.i("tag", "transferObserverListener");

try
{
transferObserver.setTransferListener(new TransferListener()
{
@Override
public void onStateChanged(int id, TransferState state)
{
Log.i("tag", state + "");
}

@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal)
{
int percentage = (int) (bytesCurrent / bytesTotal * 100);
Log.i("tag", percentage + "");
}

@Override
public void onError(int id, Exception ex)
{
Log.i("tag", "error");
}
});
}
catch (Exception x)
{
Log.i("tag", "Error in transferObserverListener: " + x.getMessage());
}
}
}


编辑

我忘了说了,但是正在测试的 Android 版本是 Android Lollipop 5.1。

最佳答案

这是 2.2.15 中的错误。不报告某些 IO 异常。它已在 2.2.16 中修复。你能试试最新版本吗?

关于java - Amazon 的适用于 Android 的 AWS Mobile SDK 及其 S3 上传实用程序未报告任何错误,知道为什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37215180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com