使用Android操作AmazonEC2的困难
我是Android的新手,我需要开发一个操作EC2和S3(AmazonWeb服务)的应用程序。我在VirtualBox上的Ubuntu10.04上使用EclipseIndigo。我安装了Android SDK,创建了一个新项目,添加了以下JAR: -aws-android-sdk-1.2.2-ec2.jar -aws-android-sdk-1.2.2-s3.jar -aws-android-sdk-1.2.2-debug.jar 我得到了这个错误: 找不到方法com.amazonaws.services.ec2.AmazonEC2Client.DescriberRegions,从方法app.workman.Ec2Activity.onCreate引用 以下是我的活动代码:使用Android操作AmazonEC2的困难,android,amazon-ec2,amazon-web-services,Android,Amazon Ec2,Amazon Web Services,我是Android的新手,我需要开发一个操作EC2和S3(AmazonWeb服务)的应用程序。我在VirtualBox上的Ubuntu10.04上使用EclipseIndigo。我安装了Android SDK,创建了一个新项目,添加了以下JAR: -aws-android-sdk-1.2.2-ec2.jar -aws-android-sdk-1.2.2-s3.jar -aws-android-sdk-1.2.2-debug.jar 我得到了这个错误: 找不到方法com.amazonaws.ser
public class Ec2Activity extends Activity{
private AmazonClientManager acm;
private AmazonEC2Client ec2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ec2);
acm = new AmazonClientManager();
if (this.acm.hasCredentials()){
ec2 = acm.ec2();
System.out.println(ec2.describeRegions());
}
}
}
以下是AmazonClientManager.java的代码:
public class AmazonClientManager {
private static final String LOG_TAG = "AmazonClientManager";
private AmazonS3Client s3Client = null;
private AmazonEC2Client ec2Client = null;
public AmazonClientManager() {
}
public AmazonS3Client s3() {
validateCredentials();
return s3Client;
}
public AmazonEC2Client ec2() {
validateCredentials();
return ec2Client;
}
public boolean hasCredentials() {
return PropertyLoader.getInstance().hasCredentials();
}
public void validateCredentials() {
if ( s3Client == null || ec2Client == null) {
Log.i( LOG_TAG, "Creating New Clients." );
// AWSCredentials credentials = new BasicAWSCredentials(PropertyLoader.getInstance().getAccessKey(), PropertyLoader.getInstance().getSecretKey());
AWSCredentials credentials = new PropertiesCredentials(this.getClass().getResourceAsStream("AwsCredentials.properties"));
s3Client = new AmazonS3Client(credentials);
ec2Client = new AmazonEC2Client(credentials);
}
}
public void clearClients() {
s3Client = null;
ec2Client = null;
}
}
谢谢,问候。这段代码我试过了,它正在工作。我只添加了aws-android-sdk-1.2.1-debug.jar
public class AWSTestActivity extends ListActivity {
/** Called when the activity is first created. */
AmazonS3Client s3Client;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AWSCredentials credentials = new BasicAWSCredentials(
"aKey",
"sKey");
s3Client = new AmazonS3Client(credentials);
List buckets = s3Client.listBuckets();
List<String> bucketNames = new ArrayList<String>(buckets.size());
Iterator<Bucket> bIter = buckets.iterator();
while (bIter.hasNext()) {
bucketNames.add((bIter.next().getName()));
}
List<String> ls=new ArrayList<String>();
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
int keyCount = 1;
String path="";
listObjectsRequest.setBucketName(bucketNames.get(0));
// listObjectsRequest.setPrefix(Key);
ObjectListing listing = s3Client.listObjects(listObjectsRequest);
List<S3ObjectSummary> objectSummaries1 = listing
.getObjectSummaries();
ListIterator<S3ObjectSummary> listIterator = objectSummaries1
.listIterator();
while (listIterator.hasNext()) {
path = listIterator.next().getKey();
keyCount++;
ls.add(path);
// if(folder.endsWith("_$folder$")){}
// else{
//
// ls.add(folder.replace(Key+"/", ""));
// }
}
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, bucketNames));
}
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Object o = this.getListAdapter().getItem(position);
String pen = o.toString();
Toast.makeText(this, "Backet Name " + " " + pen, Toast.LENGTH_LONG).show();
List<String> ls=new ArrayList<String>();
ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
int keyCount = 1;
String path="";
listObjectsRequest.setBucketName(pen);
// listObjectsRequest.setPrefix(Key);
ObjectListing listing = s3Client.listObjects(listObjectsRequest);
List<S3ObjectSummary> objectSummaries1 = listing
.getObjectSummaries();
ListIterator<S3ObjectSummary> listIterator = objectSummaries1
.listIterator();
while (listIterator.hasNext()) {
path = listIterator.next().getKey();
keyCount++;
// ls.add(path);
if(path.endsWith("_$folder$")){
// ls.add(path.replace("_$folder$", ""));
}
else{
ls.add(path.replace(path+"/", ""));
}
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, ls));
}
System.out.println("path::::::"+ls.toString());
}
}
public类AWSTestActivity扩展了ListActivity{
/**在首次创建活动时调用*/
AmazonS3客户端S3客户端;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AWSCredentials credentials=新的基本WSCredentials(
“阿凯”,
“sKey”);
s3Client=新AmazonS3Client(凭证);
List bucket=s3Client.listbakes();
List bucketNames=newarraylist(buckets.size());
迭代器比特=bucket.Iterator();
while(bIter.hasNext()){
add((bIter.next().getName());
}
List ls=新的ArrayList();
ListObjectsRequest ListObjectsRequest=新建ListObjectsRequest();
int-keyCount=1;
字符串路径=”;
listObjectsRequest.setBucketName(bucketNames.get(0));
//listObjectsRequest.setPrefix(键);
ObjectListing=s3Client.listObjects(listObjectsRequest);
List ObjectSummares1=列表
.getObjectSummaries();
ListIterator ListIterator=objectSummaries1
.listIterator();
while(listIterator.hasNext()){
path=listIterator.next().getKey();
keyCount++;
ls.add(路径);
//如果(folder.endsWith(“$folder$”){}
//否则{
//
//ls.add(folder.replace(Key+“/”,“”));
// }
}
setListAdapter(新阵列适配器)(此,
android.R.layout.simple_list_item_1,bucketNames));
}
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id){
super.onListItemClick(左、右、位置、id);
对象o=this.getListAdapter().getItem(位置);
String pen=o.toString();
Toast.makeText(这个“Backet Name”+“”+笔,Toast.LENGTH_LONG).show();
List ls=新的ArrayList();
ListObjectsRequest ListObjectsRequest=新建ListObjectsRequest();
int-keyCount=1;
字符串路径=”;
listObjectsRequest.setBucketName(笔);
//listObjectsRequest.setPrefix(键);
ObjectListing=s3Client.listObjects(listObjectsRequest);
List ObjectSummares1=列表
.getObjectSummaries();
ListIterator ListIterator=objectSummaries1
.listIterator();
while(listIterator.hasNext()){
path=listIterator.next().getKey();
keyCount++;
//ls.add(路径);
if(path.endsWith(“$folder$”){
//ls.add(path.replace(“\u$folder$”,”);
}
否则{
ls.add(path.replace(path+“/”,“”));
}
setListAdapter(新阵列适配器)(此,
android.R.layout.simple_list_item_1,ls));
}
System.out.println(“路径::”+ls.toString());
}
}
谢谢你的回答,但不起作用。。。我得到了这个错误:“05-08 11:22:56.914:E/AndroidRuntime(2463):java.lang.NoClassDefFoundError:com.amazonaws.auth.PropertiesCredentials”。我现在只使用“aws-android-sdk-1.2.2-debug.jar”。感谢.Idem提供的BasicAWSCredentials:“05-08 11:36:14.528:E/AndroidRuntime(2520):java.lang.NoClassDefFoundError:com.amazonaws.auth.BasicAWSCredentials”。我无法理解。。。jar位于构建路径中,但上面描述的类无法识别!我需要更多帮助…导入以下3类com.amazonaws.auth.AWSCredentials;com.amazonaws.auth.BasicAWSCredentials;com.amazonaws.services.s3.amazons3客户端;我想你可以从amazon演示项目中得到这个例子,amazons3client()函数是预定义的函数,你可以使用BasicAWSCredentials类来实现它