Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
HBHAndroid
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
杨秀秀
HBHAndroid
Commits
bcbecad3
Commit
bcbecad3
authored
Aug 29, 2023
by
david
Committed by
杨秀秀
Nov 21, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完善投简历功能
parent
df8b65a8
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
233 additions
and
12 deletions
+233
-12
RecruitDetailActivity.java
.../com/xx/hbhconsumer/ui/recruit/RecruitDetailActivity.java
+33
-0
RecruitDetailViewModel.java
...com/xx/hbhconsumer/ui/recruit/RecruitDetailViewModel.java
+50
-9
UriUtil.java
consumer/src/main/java/com/xx/hbhconsumer/utils/UriUtil.java
+148
-0
activity_recruit_detail.xml
consumer/src/main/res/layout/activity_recruit_detail.xml
+2
-3
No files found.
consumer/src/main/java/com/xx/hbhconsumer/ui/recruit/RecruitDetailActivity.java
View file @
bcbecad3
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
);
}
}
}
}
consumer/src/main/java/com/xx/hbhconsumer/ui/recruit/RecruitDetailViewModel.java
View file @
bcbecad3
...
@@ -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
)
...
...
consumer/src/main/java/com/xx/hbhconsumer/utils/UriUtil.java
0 → 100644
View file @
bcbecad3
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
());
}
}
consumer/src/main/res/layout/activity_recruit_detail.xml
View file @
bcbecad3
...
@@ -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>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment