@@ -24,4 +24,24 @@ public class PhotoBean implements Serializable{ |
||
24 | 24 |
public boolean isUploaded; |
25 | 25 |
|
26 | 26 |
public boolean isRawPhoto; |
27 |
+ |
|
28 |
+ @Override |
|
29 |
+ public boolean equals(Object obj) { |
|
30 |
+ if(obj == this){ |
|
31 |
+ return true; |
|
32 |
+ } |
|
33 |
+ if(!(obj instanceof PhotoBean)){ |
|
34 |
+ return false; |
|
35 |
+ } |
|
36 |
+ return (((PhotoBean) obj).photoId==this.photoId); |
|
37 |
+ } |
|
38 |
+ |
|
39 |
+ @Override |
|
40 |
+ public String toString() { |
|
41 |
+ return "PhotoBean{" + |
|
42 |
+ "photoId=" + photoId + |
|
43 |
+ ", photoName='" + photoName + '\'' + |
|
44 |
+ ", sessionSeq=" + sessionSeq + |
|
45 |
+ '}'; |
|
46 |
+ } |
|
27 | 47 |
} |
@@ -1,20 +1,59 @@ |
||
1 | 1 |
package ai.pai.lensman.service; |
2 | 2 |
|
3 |
-import android.app.IntentService; |
|
3 |
+import android.app.Service; |
|
4 | 4 |
import android.content.Intent; |
5 |
+import android.os.IBinder; |
|
5 | 6 |
|
6 |
-public class UploadService extends IntentService { |
|
7 |
+import com.android.common.executors.ThreadExecutor; |
|
8 |
+import com.android.common.utils.LogHelper; |
|
7 | 9 |
|
8 |
- private static final String TAG = "UploadService"; |
|
10 |
+import ai.pai.lensman.bean.PhotoBean; |
|
11 |
+import ai.pai.lensman.db.DBService; |
|
9 | 12 |
|
10 |
- public UploadService(){ |
|
11 |
- super(TAG); |
|
13 |
+public class UploadService extends Service implements UploadTask.OnPhotoUploadListener{ |
|
14 |
+ |
|
15 |
+ private PhotoBean currentPhoto; |
|
16 |
+ |
|
17 |
+ @Override |
|
18 |
+ public IBinder onBind(Intent intent) { |
|
19 |
+ return null; |
|
12 | 20 |
} |
13 | 21 |
|
14 | 22 |
@Override |
15 |
- protected void onHandleIntent(Intent intent) { |
|
23 |
+ public int onStartCommand(Intent intent, int flags, int startId) { |
|
24 |
+ startUpload(); |
|
25 |
+ return super.onStartCommand(intent, flags, startId); |
|
26 |
+ } |
|
16 | 27 |
|
28 |
+ private synchronized void startUpload(){ |
|
29 |
+ if(currentPhoto!=null){ |
|
30 |
+ LogHelper.d("czy","当前有图片正在上传"+currentPhoto); |
|
31 |
+ return; |
|
32 |
+ } |
|
33 |
+ currentPhoto = DBService.getInstance().getNextUploadPhoto(); |
|
34 |
+ if(currentPhoto==null){ |
|
35 |
+ LogHelper.d("czy","本地图片已全部上传"); |
|
36 |
+ return; |
|
37 |
+ } |
|
38 |
+ LogHelper.d("czy","即将上传的照片是"+currentPhoto); |
|
39 |
+ new UploadTask(currentPhoto,this).executeOnExecutor(ThreadExecutor.getInstance().getExecutor()); |
|
40 |
+ } |
|
17 | 41 |
|
42 |
+ @Override |
|
43 |
+ public void onPhotoUploadSucceed(PhotoBean bean) { |
|
44 |
+ if(bean.equals(currentPhoto)){ |
|
45 |
+ currentPhoto.isUploaded = true; |
|
46 |
+ DBService.getInstance().updatePhotoBean(currentPhoto); |
|
47 |
+ currentPhoto = null; |
|
48 |
+ } |
|
49 |
+ startUpload(); |
|
18 | 50 |
} |
19 | 51 |
|
52 |
+ @Override |
|
53 |
+ public void onPhotoUploadFail(PhotoBean bean) { |
|
54 |
+ if(bean.equals(currentPhoto)){ |
|
55 |
+ currentPhoto = null; |
|
56 |
+ } |
|
57 |
+ startUpload(); |
|
58 |
+ } |
|
20 | 59 |
} |
@@ -1,79 +1,78 @@ |
||
1 | 1 |
package ai.pai.lensman.service; |
2 | 2 |
|
3 |
-import android.content.Context; |
|
4 | 3 |
import android.os.AsyncTask; |
5 | 4 |
|
6 | 5 |
import com.android.common.utils.LogHelper; |
7 |
-import com.android.common.utils.NetworkUtil; |
|
8 | 6 |
|
9 | 7 |
import org.json.JSONObject; |
10 | 8 |
|
11 | 9 |
import java.io.File; |
12 | 10 |
|
11 |
+import ai.pai.lensman.bean.PhotoBean; |
|
13 | 12 |
import ai.pai.lensman.db.Preferences; |
14 | 13 |
import ai.pai.lensman.utils.UrlContainer; |
15 | 14 |
|
16 |
-public class UploadTask extends AsyncTask<String,Integer,Boolean> { |
|
15 |
+public class UploadTask extends AsyncTask<Void, Integer, Boolean> { |
|
17 | 16 |
|
18 | 17 |
private static final String TAG = "czy"; |
19 |
- private Context context; |
|
20 |
- private String photoPath; |
|
18 |
+ private PhotoBean bean; |
|
21 | 19 |
private OnPhotoUploadListener listener; |
22 |
- private String groupId; |
|
23 | 20 |
|
24 |
- public UploadTask(Context context ,String groupId, OnPhotoUploadListener listener){ |
|
25 |
- this.context = context; |
|
21 |
+ public UploadTask(PhotoBean bean, OnPhotoUploadListener listener) { |
|
22 |
+ this.bean = bean; |
|
26 | 23 |
this.listener = listener; |
27 |
- this.groupId = groupId; |
|
28 | 24 |
} |
29 | 25 |
|
30 | 26 |
@Override |
31 |
- protected Boolean doInBackground(String... params) { |
|
32 |
- if(!NetworkUtil.isNetworkConnected(context)){ |
|
33 |
- return false; |
|
34 |
- } |
|
35 |
- photoPath = params[0]; |
|
36 |
- try{ |
|
37 |
- File photo = new File(photoPath); |
|
38 |
- LogHelper.d(TAG,"上传照片,路径为 = "+photoPath); |
|
39 |
- if(photo.exists() &&photo.isFile()){ |
|
40 |
- PhotoUploadUtils photoUploadUtils = new PhotoUploadUtils(UrlContainer.PHOTO_UPLOAD_URL+"?timestamp="+System.currentTimeMillis()); |
|
27 |
+ protected Boolean doInBackground(Void... params) { |
|
28 |
+ try { |
|
29 |
+ String dirPath = ai.pai.lensman.utils.Constants.APP_IMAGE_DIR + File.separator + bean.sessionId |
|
30 |
+ + File.separator + ai.pai.lensman.utils.Constants.THUMBNAIL_DIR_NAME; |
|
31 |
+ File dir = new File(dirPath); |
|
32 |
+ dir.mkdirs(); |
|
33 |
+ File photo = new File(dir, bean.photoName); |
|
34 |
+ LogHelper.d(TAG, "上传照片 " + bean); |
|
35 |
+ if (photo.exists() && photo.isFile()) { |
|
36 |
+ PhotoUploadUtils photoUploadUtils = new PhotoUploadUtils(UrlContainer.PHOTO_UPLOAD_URL + "?timestamp=" + System.currentTimeMillis()); |
|
41 | 37 |
photoUploadUtils.addFileParameter("photo", photo); |
42 |
- photoUploadUtils.addTextParameter("user_id", Preferences.getInstance().getLensManId()); |
|
43 |
- photoUploadUtils.addTextParameter("group_id", groupId); |
|
44 |
- photoUploadUtils.addTextParameter("nickname", Preferences.getInstance().getUserName()); |
|
45 |
- String result=new String(photoUploadUtils.send(),"UTF-8"); |
|
38 |
+ photoUploadUtils.addTextParameter("user_id", bean.lensmanId); |
|
39 |
+ photoUploadUtils.addTextParameter("session_id", bean.sessionId); |
|
40 |
+ photoUploadUtils.addTextParameter("photo_id", String.valueOf(bean.photoId)); |
|
41 |
+ photoUploadUtils.addTextParameter("nickname",Preferences.getInstance().getUserName()); |
|
42 |
+ |
|
43 |
+ String result = new String(photoUploadUtils.send(), "UTF-8"); |
|
46 | 44 |
JSONObject resultObj = new JSONObject(result); |
47 |
- if(resultObj.getInt("status")==200){ |
|
48 |
- LogHelper.d(TAG,"上传 UploadTask upload result ok "); |
|
45 |
+ if (resultObj.getInt("status") == 200) { |
|
46 |
+ LogHelper.d(TAG, "上传 UploadTask upload result ok "); |
|
49 | 47 |
JSONObject info = resultObj.getJSONObject("data"); |
50 | 48 |
return true; |
51 | 49 |
} |
52 |
- }else{ |
|
50 |
+ } else { |
|
53 | 51 |
return false; |
54 | 52 |
} |
55 | 53 |
|
56 |
- }catch (Exception e){ |
|
57 |
- LogHelper.d(TAG, "上传发生异常 UploadTask photo path:"+photoPath+ " error:" + e); |
|
54 |
+ } catch (Exception e) { |
|
55 |
+ LogHelper.d(TAG, "上传发生异常 UploadTask :" + bean + " error:" + e); |
|
58 | 56 |
} |
59 | 57 |
return false; |
60 | 58 |
} |
61 | 59 |
|
62 | 60 |
@Override |
63 | 61 |
protected void onPostExecute(Boolean result) { |
64 |
- if(listener!=null){ |
|
65 |
- if(result){ |
|
66 |
- LogHelper.d(TAG, "上传 UploadTask photo path:"+photoPath+ " success "); |
|
67 |
- listener.onPhotoUploadSucceed(photoPath); |
|
68 |
- }else{ |
|
69 |
- LogHelper.d(TAG, "上传 UploadTask photo path:"+photoPath+ " fail "); |
|
70 |
- listener.onPhotoUploadFail(photoPath,groupId); |
|
62 |
+ if (listener != null) { |
|
63 |
+ if (result) { |
|
64 |
+ LogHelper.d(TAG, "上传 UploadTask " + bean + " success "); |
|
65 |
+ listener.onPhotoUploadSucceed(bean); |
|
66 |
+ } else { |
|
67 |
+ LogHelper.d(TAG, "上传 UploadTask " + bean + " fail "); |
|
68 |
+ listener.onPhotoUploadFail(bean); |
|
71 | 69 |
} |
72 | 70 |
} |
73 | 71 |
} |
74 | 72 |
|
75 | 73 |
public interface OnPhotoUploadListener { |
76 |
- void onPhotoUploadSucceed(String photoPath); |
|
77 |
- void onPhotoUploadFail(String photoPath, String groupId); |
|
74 |
+ void onPhotoUploadSucceed(PhotoBean bean); |
|
75 |
+ |
|
76 |
+ void onPhotoUploadFail(PhotoBean bean); |
|
78 | 77 |
} |
79 | 78 |
} |
@@ -1,12 +1,16 @@ |
||
1 | 1 |
package ai.pai.lensman.upload; |
2 | 2 |
|
3 |
+import android.content.Intent; |
|
4 |
+ |
|
3 | 5 |
import java.text.SimpleDateFormat; |
4 | 6 |
import java.util.ArrayList; |
5 | 7 |
import java.util.Date; |
6 | 8 |
|
9 |
+import ai.pai.lensman.App; |
|
7 | 10 |
import ai.pai.lensman.base.BaseInteractor; |
8 | 11 |
import ai.pai.lensman.bean.SessionBean; |
9 | 12 |
import ai.pai.lensman.db.DBService; |
13 |
+import ai.pai.lensman.service.UploadService; |
|
10 | 14 |
|
11 | 15 |
public class UploadPresenter implements UploadContract.Presenter,BaseInteractor.InteractorListener<ArrayList<String>> { |
12 | 16 |
|
@@ -43,6 +47,8 @@ public class UploadPresenter implements UploadContract.Presenter,BaseInteractor. |
||
43 | 47 |
uploadView.refreshSessionViews(sessionList); |
44 | 48 |
} |
45 | 49 |
sessionSeq = sessionList.size(); |
50 |
+ |
|
51 |
+ App.getAppContext().startService(new Intent(App.getAppContext(), UploadService.class)); |
|
46 | 52 |
} |
47 | 53 |
|
48 | 54 |
@Override |