Commit bcbecad3 authored by david's avatar david Committed by 杨秀秀

完善投简历功能

parent df8b65a8
package com.xx.hbhconsumer.ui.recruit; package com.xx.hbhconsumer.ui.recruit;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import androidx.annotation.Nullable;
import com.xx.hbhconsumer.R; import com.xx.hbhconsumer.R;
import com.xx.hbhconsumer.data.http.requst.RecruitRequest; import com.xx.hbhconsumer.data.http.requst.RecruitRequest;
import com.xx.hbhconsumer.databinding.ActivityRecruitDetailBinding; import com.xx.hbhconsumer.databinding.ActivityRecruitDetailBinding;
import com.xx.hbhconsumer.utils.UriUtil;
import me.goldze.mvvmhabit.base.BaseActivity; import me.goldze.mvvmhabit.base.BaseActivity;
import me.tatarka.bindingcollectionadapter2.BR; import me.tatarka.bindingcollectionadapter2.BR;
public class RecruitDetailActivity extends BaseActivity<ActivityRecruitDetailBinding, RecruitDetailViewModel> { public class RecruitDetailActivity extends BaseActivity<ActivityRecruitDetailBinding, RecruitDetailViewModel> {
private static final String TAG = "RecruitDetailActivity";
String[] mimeTypes =
{"application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .doc & .docx
"application/pdf"};
@Override @Override
public void initData() { public void initData() {
super.initData(); super.initData();
...@@ -67,6 +80,13 @@ public class RecruitDetailActivity extends BaseActivity<ActivityRecruitDetailBin ...@@ -67,6 +80,13 @@ public class RecruitDetailActivity extends BaseActivity<ActivityRecruitDetailBin
} }
}); });
binding.btnChooseFile.setOnClickListener(view -> {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent,"选择文件"),1);
});
} }
@Override @Override
...@@ -85,4 +105,17 @@ public class RecruitDetailActivity extends BaseActivity<ActivityRecruitDetailBin ...@@ -85,4 +105,17 @@ public class RecruitDetailActivity extends BaseActivity<ActivityRecruitDetailBin
String id = getIntent().getStringExtra("id"); String id = getIntent().getStringExtra("id");
return new RecruitDetailViewModel(getApplication(), model, id); return new RecruitDetailViewModel(getApplication(), model, id);
} }
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
String pathString = UriUtil.getPath(this, uri);
Log.i(TAG, "onActivityResult: pathString = " + pathString);
viewModel.upLoadFile(pathString);
}
}
} }
...@@ -6,16 +6,18 @@ import androidx.annotation.NonNull; ...@@ -6,16 +6,18 @@ import androidx.annotation.NonNull;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import com.xx.hbhconsumer.data.http.requst.RecruitRequest; import com.xx.hbhconsumer.data.http.requst.RecruitRequest;
import com.xx.hbhconsumer.data.http.respons.Filebean;
import com.xx.hbhconsumer.data.http.respons.RecruitBean; import com.xx.hbhconsumer.data.http.respons.RecruitBean;
import com.xx.hbhconsumer.ui.pwd.ForgetPwdActivity;
import java.io.File;
import java.util.List;
import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.functions.Consumer; import io.reactivex.rxjava3.functions.Consumer;
import me.goldze.mvvmhabit.base.BaseViewModel; import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.http.ApiDisposableObserver; import me.goldze.mvvmhabit.http.ApiDisposableObserver;
import me.goldze.mvvmhabit.utils.RxUtils; import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;
public class RecruitDetailViewModel extends BaseViewModel<RecruitRequest> { public class RecruitDetailViewModel extends BaseViewModel<RecruitRequest> {
...@@ -48,13 +50,52 @@ public class RecruitDetailViewModel extends BaseViewModel<RecruitRequest> { ...@@ -48,13 +50,52 @@ public class RecruitDetailViewModel extends BaseViewModel<RecruitRequest> {
loadData(); loadData();
} }
public BindingCommand postJob = new BindingCommand(new BindingAction() { public void upLoadFile(String filePath) {
@Override File file = new File(filePath);
public void call() { model.upLoadFile(file).compose(RxUtils.schedulersTransformer()) //线程调度
startActivity(ForgetPwdActivity.class); .doOnSubscribe(RecruitDetailViewModel.this)
} .doOnSubscribe (new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
showDialog("请稍等");
}
}).subscribe(new ApiDisposableObserver<List<Filebean>>() {
@Override
public void onSuccess(List<Filebean> resultBean) {
dismissDialog();
postJob(resultBean.get(0).getBusinessId());
}
@Override
public void onError(String Error) {
dismissDialog();
}
});
}
}); public void postJob (String fileId) {
model.recruitment(id, fileId)
.compose(RxUtils.schedulersTransformer()) //线程调度
.doOnSubscribe(RecruitDetailViewModel.this)
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
}
}).subscribe(new ApiDisposableObserver<Integer>() {
@Override
public void onSuccess(Integer result) {
ToastUtils.showShort("投递成功");
}
@Override
public void onError(String Error) {
dismissDialog();
}
});
}
public void loadData() { public void loadData() {
model.queryAppRecruitmentDetail(id) model.queryAppRecruitmentDetail(id)
......
package com.xx.hbhconsumer.utils;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import androidx.annotation.RequiresApi;
public class UriUtil {
/**
* 从Uri获取文件路径,存储路径需要获取
* android.permission.READ_EXTERNAL_STORAGE权限
* 适用于MediaStore和其他基于文件的内容提供
*
* @param context 上下文对象
* @param uri Uri
*/
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static String getPath(Context context, Uri uri) {
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
}
// DownloadsProvider
else if (isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
}
// MediaProvider
else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[]{
split[1]
};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme())) {
return getDataColumn(context, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
/**
* Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
* @param context The context.
* @param uri The Uri to query.
* @param selection (Optional) Filter used in the query.
* @param selectionArgs (Optional) Selection arguments used in the query.
* @return The value of the _data column, which is typically a file path.
*/
public static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
public static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
}
...@@ -266,7 +266,7 @@ ...@@ -266,7 +266,7 @@
android:textSize="16sp" /> android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_login" android:id="@+id/btn_choose_file"
android:layout_width="156dp" android:layout_width="156dp"
android:layout_height="48dp" android:layout_height="48dp"
android:layout_below="@id/tv_contact_information" android:layout_below="@id/tv_contact_information"
...@@ -277,8 +277,7 @@ ...@@ -277,8 +277,7 @@
android:text=" 投简历" android:text=" 投简历"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold" android:textStyle="bold"/>
binding:onClickCommand="@{recruitDetailViewModel.postJob}" />
</RelativeLayout> </RelativeLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment