一、自定义MyApplication
package com.example.analysisxml;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
MyActivityManager.getInstance().setCurrentActivity(activity);
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
}
});
}
}
二、Activity管理类
package com.example.analysisxml;
import android.app.Activity;
import java.lang.ref.WeakReference;
/**
* Activity工具类(获取当前Activity)
*/
public class MyActivityManager {
private static MyActivityManager manager;
private WeakReference<Activity> currentActivityWeakRef;
private MyActivityManager() {
}
public static MyActivityManager getInstance() {
if (manager == null) {
manager = new MyActivityManager();
}
return manager;
}
public Activity getCurrentActivity() {
Activity currentActivity = null;
if (currentActivityWeakRef != null) {
currentActivity = currentActivityWeakRef.get();
}
return currentActivity;
}
public void setCurrentActivity(Activity activity) {
currentActivityWeakRef = new WeakReference<>(activity);
}
}
三、AndroidManifest.xml清单文件中引用MyApplication
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" >
<application
android:name=".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:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AnalysisXML"
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>
四、上传文件工具类
package com.example.analysisxml;
import android.app.Activity;
import android.util.Log;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* 上传文件工具类
*/
public class UploadFile {
private static UploadFile uploadFile;
private static Activity activity;
private OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.build();
private UploadFile() {
}
public static UploadFile getInstance() {
if (uploadFile == null) {
uploadFile = new UploadFile();
activity = MyActivityManager.getInstance().getCurrentActivity();
}
return uploadFile;
}
/**
* 上传数据
* @param url
* @param data
*/
public void upload(String url, String data) {
new Thread(new Runnable() {
@Override
public void run() {
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(mediaType, data);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try {
Response response = client.newCall(request).execute();
if (response.code() == 200) {
String result = response.body().string();
Log.e("返回结果", result);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "上传数据成功", Toast.LENGTH_SHORT).show();
}
});
} else {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "上传数据失败", Toast.LENGTH_SHORT).show();
}
});
}
} catch (IOException e) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "上传异常:" + e, Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
/**
* 上传图片
* @param url
* @param imagePath
*/
public void uploadImage(String url, String imagePath) {
new Thread(new Runnable() {
@Override
public void run() {
MediaType mediaType = MediaType.parse("image/*");
File file = new File(imagePath);
RequestBody image = RequestBody.create(mediaType, file);
RequestBody body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("upload", file.getName(), image)
.build();
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try {
Response response = client.newCall(request).execute();
if (response.code() == 200) {
String result = response.body().string();
Log.e("返回结果", result);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "上传图片成功", Toast.LENGTH_SHORT).show();
}
});
} else {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "上传图片失败", Toast.LENGTH_SHORT).show();
}
});
}
} catch (IOException e) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "上传异常:" + e, Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
/**
* 上传视频
* @param url
* @param videoPath
*/
public void uploadVideo(String url, String videoPath) {
new Thread(new Runnable() {
@Override
public void run() {
MediaType mediaType = MediaType.parse("video/*");
File file = new File(videoPath);
RequestBody video = RequestBody.create(mediaType, file);
RequestBody body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("upload", file.getName(), video)
.build();
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try {
Response response = client.newCall(request).execute();
if (response.code() == 200) {
String result = response.body().string();
Log.e("返回结果", result);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "上传视频成功", Toast.LENGTH_SHORT).show();
}
});
} else {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "上传视频失败", Toast.LENGTH_SHORT).show();
}
});
}
} catch (IOException e) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "上传异常:" + e, Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
}