Skip to content

Commit

Permalink
上传控制类Demo调整,增加重复图片上传判断
Browse files Browse the repository at this point in the history
  • Loading branch information
r17171709 committed Dec 12, 2017
1 parent 9159b3b commit 5f7be0d
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 42 deletions.
53 changes: 35 additions & 18 deletions app/src/main/java/com/renyu/androidimagelibrary/UploadActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import com.blankj.utilcode.util.SizeUtils
import com.renyu.androidimagelibrary.view.UploadView
import com.renyu.commonlibrary.baseact.BaseActivity
import com.renyu.commonlibrary.views.actionsheet.ActionSheetFragment
import com.renyu.imagelibrary.bean.UploadTaskBean
import com.renyu.imagelibrary.commonutils.Utils
import kotlinx.android.synthetic.main.activity_upload.*
import java.io.File
Expand All @@ -24,15 +25,10 @@ import java.io.File
*/
class UploadActivity: BaseActivity() {

val pics = arrayOf("/storage/emulated/0/Pictures/dongqiudi/1512634878367.jpg",
"/storage/emulated/0/Pictures/dongqiudi/1512635214549.jpg",
"/storage/emulated/0/Pictures/dongqiudi/1512635218258.jpg",
"/storage/emulated/0/Pictures/dongqiudi/1512635223683.jpg",
"/storage/emulated/0/Pictures/dongqiudi/1512635228373.jpg")

var count = 0

// 选择的本地图片文件路径集合
val picPath = ArrayList<String>()
// 远程上传完成的图片文件集合
val urlMaps = HashMap<String, String>()

val upload: UploadImageManager by lazy {
UploadImageManager()
Expand All @@ -56,7 +52,9 @@ class UploadActivity: BaseActivity() {
if (msg != null && msg.data != null) {
val path = msg.data.getString("path")
val percent = msg.data.getInt("percent")
refreshPic(path, percent)
val statue = msg.data.getSerializable("statue") as UploadTaskBean.UploadState
val url = msg.data.getString("url")
refreshPic(path, percent, statue, url)
}
}
}
Expand All @@ -68,15 +66,17 @@ class UploadActivity: BaseActivity() {
val bundle = Bundle()
bundle.putString("path", it.filePath)
bundle.putInt("percent", it.progress)
bundle.putSerializable("statue", it.statue)
bundle.putString("url", it.url)
message.data = bundle
handler.sendMessage(message)
}
button_start.setOnClickListener {
upload.addTask(pics[count%5], "http://www.zksell.com/index.php?s=Api/Base/uploadpic")
count++
}
button_cancel.setOnClickListener {
upload.cancelTask("aizuna_"+File(pics[(count-1)%5]).name.substring(0, File(pics[(count-1)%5]).name.indexOf(".")))
button_commit.setOnClickListener {
picPath.filter {
urlMaps.containsKey(it)
}.forEach {
println(urlMaps[it])
}
}
}

Expand Down Expand Up @@ -121,6 +121,10 @@ class UploadActivity: BaseActivity() {
fun addImage(path: String, position: Int) {
val view: UploadView = LayoutInflater.from(this).inflate(R.layout.view_upload, null, false) as UploadView
view.listener = object : UploadView.OnUIControllListener {
override fun retryUploadPic() {
retryPic(path)
}

override fun deletePic() {
upload.cancelTask("aizuna_"+File(path).name.substring(0, File(path).name.indexOf(".")))
picPath.remove(path)
Expand All @@ -139,7 +143,7 @@ class UploadActivity: BaseActivity() {
view.loadPic(path)
if (!TextUtils.isEmpty(path)) {
view.post {
upload.addTask(path, "http://www.zksell.com/index.php?s=Api/Base/uploadpic")
upload.addTask(path, "http://www.zksell.com/index.php?s=Api/Base/uploadpic", File(path).name.substring(0, File(path).name.indexOf(".")))
}
}

Expand All @@ -158,6 +162,10 @@ class UploadActivity: BaseActivity() {
}
}

fun retryPic(path: String) {
upload.addTask(path, "http://www.zksell.com/index.php?s=Api/Base/uploadpic", File(path).name.substring(0, File(path).name.indexOf(".")))
}

fun choicePic() {
val view_clearmessage: View = LayoutInflater.from(this)
.inflate(R.layout.view_actionsheet_button_3, null, false)
Expand Down Expand Up @@ -185,11 +193,20 @@ class UploadActivity: BaseActivity() {
}
}

fun refreshPic(path: String, percent: Int) {
fun refreshPic(path: String, percent: Int, statue: UploadTaskBean.UploadState, url: String) {
for (i in 0 until grid_pic.childCount) {
val tag = grid_pic.getChildAt(i).tag
if (tag != null && grid_pic.getChildAt(i).tag == path) {
(grid_pic.getChildAt(i) as UploadView).updateMaskPercent(percent)
when (statue) {
UploadTaskBean.UploadState.UPLOADFAIL -> {
(grid_pic.getChildAt(i) as UploadView).uploadError()
}
UploadTaskBean.UploadState.UPLOADSUCCESS -> {
(grid_pic.getChildAt(i) as UploadView).uploadSuccess()
urlMaps.put(path, url)
}
else -> (grid_pic.getChildAt(i) as UploadView).uploadMaskPercent(percent)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ public UploadImageManager() {
* 添加任务
* @param filePath
*/
public synchronized void addTask(String filePath, String url) {
public synchronized void addTask(String filePath, String url, String tag) {
Runnable runnable = () -> {
// 开始上传
UploadTaskBean bean = beans.get(filePath);
UploadTaskBean bean = beans.get(tag);
bean.setUrl("");
bean.setProgress(0);
bean.setStatue(UploadTaskBean.UploadState.UPLOADING);
Expand Down Expand Up @@ -108,14 +108,35 @@ else if (resp.isSuccessful()) {
}
};

// 存在相同任务
if (beans.containsKey(tag) && tasks.containsKey(tag)) {
// 如果上传完成,则直接刷新
if (beans.get(tag).getStatue() == UploadTaskBean.UploadState.UPLOADSUCCESS) {
if (callBack != null) {
callBack.updateMap(beans.get(tag));
}
return;
}
// 如果上传失败,则重新上传
else if (beans.get(tag).getStatue() == UploadTaskBean.UploadState.UPLOADFAIL) {

}
// 如果正在上传中或者处于队列中,则不进行添加
else {
return;
}
}
// 防止出现错误情况
cancelTask(tag);

UploadTaskBean bean = new UploadTaskBean();
bean.setFilePath(filePath);
bean.setProgress(0);
bean.setStatue(UploadTaskBean.UploadState.UPLOADPREPARE);
// 添加上传状态Map中
beans.put(filePath, bean);
beans.put(tag, bean);
// 添加上传线程池中
tasks.put("aizuna_"+new File(filePath).getName().substring(0, new File(filePath).getName().indexOf(".")), uploadService.submit(runnable));
tasks.put(tag, uploadService.submit(runnable));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,12 @@ class UploadView : RelativeLayout {
var tv_releasehousepic: TextView? = null
var iv_releasehousepic_delete: ImageView? = null
var iv_releasehousepic_cover: TextView? = null
var tv_uploadretry: TextView? = null

interface OnUIControllListener {
fun deletePic()
fun clickPic()
fun retryUploadPic()
}
var listener: OnUIControllListener? = null

Expand All @@ -48,13 +50,18 @@ class UploadView : RelativeLayout {
tv_releasehousepic = findViewById(R.id.tv_releasehousepic)
iv_releasehousepic_delete = findViewById(R.id.iv_releasehousepic_delete)
iv_releasehousepic_cover = findViewById(R.id.iv_releasehousepic_cover)
tv_uploadretry = findViewById(R.id.tv_uploadretry)

iv_releasehousepic_delete?.setOnClickListener {
listener?.deletePic()
}
iv_releasehousepic?.setOnClickListener {
listener?.clickPic()
}
tv_uploadretry?.setOnClickListener {
tv_uploadretry?.visibility = View.GONE
listener?.retryUploadPic()
}
}

fun loadPic(path: String) {
Expand All @@ -79,8 +86,27 @@ class UploadView : RelativeLayout {
tag = "$path"
}

fun updateMaskPercent(percent: Int) {
/**
* 上传遮罩更新
*/
fun uploadMaskPercent(percent: Int) {
view_mask?.layoutParams?.height = (measuredHeight * ((100-percent)*1.0f/100)).toInt()
view_mask?.requestLayout()
}

/**
* 上传成功
*/
fun uploadSuccess() {
view_mask?.visibility = View.GONE
}

/**
* 上传失败
*/
fun uploadError() {
view_mask?.layoutParams?.height = measuredHeight
view_mask?.requestLayout()
tv_uploadretry?.visibility = View.VISIBLE
}
}
14 changes: 2 additions & 12 deletions app/src/main/res/layout/activity_upload.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,13 @@
android:layout_height="match_parent">

<Button
android:id="@+id/button_start"
android:id="@+id/button_commit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="开始上传" />

<Button
android:id="@+id/button_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="取消上传" />
android:text="确定" />

<android.support.v7.widget.GridLayout
android:id="@+id/grid_pic"
Expand Down
7 changes: 0 additions & 7 deletions app/src/main/res/layout/view_releasehousepic.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,6 @@
android:paddingTop="40dip"
android:textColor="#999999"
android:textSize="12sp"/>
<ImageView
android:id="@+id/iv_releasehousepic_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_alignParentRight="true"
android:src="@mipmap/ic_deleteimage"/>
<TextView
android:id="@+id/iv_releasehousepic_cover"
android:background="#ffac00"
Expand Down
16 changes: 16 additions & 0 deletions app/src/main/res/layout/view_upload.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,23 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#a0000000"
android:layout_margin="3dip"
android:layout_alignParentBottom="true">

</View>
<TextView
android:id="@+id/tv_uploadretry"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:visibility="gone"
android:layout_margin="3dip"
android:text="重试"/>
<ImageView
android:id="@+id/iv_releasehousepic_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_alignParentRight="true"
android:src="@mipmap/ic_deleteimage"/>
</com.renyu.androidimagelibrary.view.UploadView>

0 comments on commit 5f7be0d

Please sign in to comment.