新建一个类名为MyApplication初始化OSS
import android.app.Application;
import com.alibaba.sdk.android.oss.ClientConfiguration;
import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.common.auth.OSSPlainTextAKSKCredentialProvider;
public class MyApplication extends Application {
private OSS oss;
@Override
public void onCreate() {
super.onCreate();
// 初始化OSS客户端
String endpoint = "http://oss-cn-beijing.aliyuncs.com";//以北京为例
String accessKeyId = "";//填上自己的
String accessKeySecret = "";
OSSPlainTextAKSKCredentialProvider credentialProvider =
new OSSPlainTextAKSKCredentialProvider(accessKeyId, accessKeySecret);
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
conf.setMaxConcurrentRequest(5); // 最大并发请求数,默认5个
conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf);
}
public OSS getOss() {
return oss;
}
}
MainActivity代码
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.model.GetObjectRequest;
import com.alibaba.sdk.android.oss.model.GetObjectResult;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
OSS oss = ((MyApplication) getApplication()).getOss();
String bucketName = "yxc-bucket";
String objectKey = "1.png";//资源的名称
new Thread(() -> {
try {
// 下载图片
GetObjectRequest get = new GetObjectRequest(bucketName, objectKey);
GetObjectResult result = oss.getObject(get);
InputStream inputStream = result.getObjectContent();
// 将InputStream转换为Bitmap
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
// 更新UI
runOnUiThread(() -> imageView.setImageBitmap(bitmap));
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}
简单的布局代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
</RelativeLayout>
配置文件代码,很重要!!!
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:name="com.ye.oss.MyApplication"//这我也不知道什么原理
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:usesCleartextTraffic="true"//这也很重要
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.OSS"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
build.gradle引入
implementation 'com.squareup.okhttp3:okhttp:4.11.0' implementation libs.oss.android.sdk
下次更新上传图片的代码