소스 검색

尝试支持上传多张图片

zengjiebin 8 년 전
부모
커밋
52e5aafcc7

+ 2 - 0
app/src/main/AndroidManifest.xml

@@ -387,6 +387,8 @@
         <activity android:name="com.sheep.gamegroup.view.activity.ActUnderstandSheep"  android:screenOrientation="portrait"/>
         <activity android:name="com.sheep.gamegroup.view.activity.ActCreditCardTaskList" android:screenOrientation="portrait" />
         <activity android:name="com.sheep.gamegroup.view.activity.ActCreditCardWeb" android:screenOrientation="portrait"/>
+        <activity android:name="com.sheep.gamegroup.view.activity.TaskDetailCreditCardAct" android:screenOrientation="portrait"/>
+        <activity android:name="com.sheep.gamegroup.view.activity.TaskDetailAddQQAct" android:screenOrientation="portrait"/>
         <!--友盟start-->
 
 

+ 3 - 19
app/src/main/java/com/kfzs/duanduan/fragment/FgtCreditCardTaskList.java

@@ -68,25 +68,9 @@ public class FgtCreditCardTaskList extends BaseFragment {
     }
 
     private void onItemClickTask(TaskReleaseEty taskReleaseEty) {
-        SheepApp.getInstance().getNetComponent().getApiService().getCredit(taskReleaseEty.getTask().getExt())
-                        .subscribeOn(Schedulers.io())
-                        .observeOn(AndroidSchedulers.mainThread())
-                        .subscribe(new SheepSubscriber<BaseMessage>(getContext()) {
-                            @Override
-                            public void onNext(BaseMessage baseMessage) {
-                                final CreditCard creditCard = baseMessage.getData(CreditCard.class);
-                                Jump2View.getInstance().goCreditCardWeb(getActivity(), creditCard);
-                                if(BuildConfig.DEBUG)
-                                    System.out.println("baseMessage onNext "+JSON.toJSONString(baseMessage));
-                            }
-
-                            @Override
-                            public void onError(BaseMessage baseMessage) {
-                                if(BuildConfig.DEBUG)
-                                    System.out.println("baseMessage onError "+JSON.toJSONString(baseMessage));
-                                G.showToast(TextUtils.isEmpty(baseMessage.getMsg()) ? "服务器错误,请稍候再试" : baseMessage.getMsg());
-                            }
-                        });
+        taskReleaseEty.getTask().setBonus(taskReleaseEty.getBonus());
+        taskReleaseEty.getTask().setName(taskReleaseEty.getName());
+        Jump2View.getInstance().goCreditCardTaskDetail(getActivity(), taskReleaseEty.getTask());
     }
 
     private void initData() {

+ 1 - 5
app/src/main/java/com/kfzs/duanduan/fragment/FgtSmallSheep.java

@@ -325,7 +325,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
                 });
     }
 
-    @OnClick({R.id.icon_img_iv, R.id.user_layout, R.id.withdrawal, R.id.couple_red_packets_iv, R.id.try_play_layout, R.id.invitation_layout, R.id.lying_layout, R.id.newbie_task})
+    @OnClick({R.id.icon_img_iv, R.id.user_layout, R.id.withdrawal, R.id.couple_red_packets_iv, R.id.try_play_layout, R.id.invitation_layout, R.id.lying_layout, R.id.newbie_task, R.id.card_layout})
     public void onViewClicked(View view) {
         switch (view.getId()) {
             case R.id.icon_img_iv:
@@ -362,10 +362,6 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
                 }
                 break;
             case R.id.newbie_task://新手任务
-                if(userEntity == null){
-                    G.showToast("网络错误,请重启重试");
-                    return;
-                }
                 SheepApp.getInstance().getNetComponent().getApiService().getNewbieTask()
                         .subscribeOn(Schedulers.io())
                         .observeOn(AndroidSchedulers.mainThread())

+ 12 - 3
app/src/main/java/com/kfzs/duanduan/react/upfile/UpFileListener.java

@@ -5,10 +5,19 @@ package com.kfzs.duanduan.react.upfile;
  */
 
 public interface UpFileListener {
+    /**
+     * 上传图片成功
+     * @param msg
+     * @param index index为-1时代表只上传一个文件或者多个文件完成,大于0时代表上传成功的图片所在位置
+     */
+    void Success(String msg, int index);
 
-    void Success(String msg);
-
-    void Progress(String progress);
+    /**
+     * 上传图片的进度
+     * @param progress
+     * @param index index为-1时代表只上传一个文件或者多个文件时的进度,大于0时代表上传进度的图片所在位置
+     */
+    void Progress(String progress, int index);
 
     void Failure(String err);
 }

+ 46 - 5
app/src/main/java/com/kfzs/duanduan/react/upfile/UpFileUtils.java

@@ -1,22 +1,21 @@
 package com.kfzs.duanduan.react.upfile;
 
-import android.app.Activity;
 
 import com.zhy.http.okhttp.OkHttpUtils;
 import com.zhy.http.okhttp.callback.Callback;
 
 import java.io.File;
+import java.util.ArrayList;
 
 import okhttp3.Call;
 import okhttp3.Response;
-import okhttp3.ResponseBody;
 
 /**
  * Created by howie on 2017/5/11.
  */
 
 public class UpFileUtils {
-//    private static String URL_RN_UP_IMAGE = "http://shopapi.bandaimi.com/v1/upload_pic/avatar";
+    //    private static String URL_RN_UP_IMAGE = "http://shopapi.bandaimi.com/v1/upload_pic/avatar";
     private static String URL_RN_UP_IMAGE = "http://static.kuaifazs.com/sdkkitfile.php";
 
     //上传图片
@@ -29,7 +28,7 @@ public class UpFileUtils {
                     @Override
                     public void inProgress(float progress, long total, int id) {
                         super.inProgress(progress, total, id);
-                        upFileListener.Progress(String.valueOf(Math.round(progress * 100)));
+                        upFileListener.Progress(String.valueOf(Math.round(progress * 100)), -1);
                     }
 
                     @Override
@@ -44,10 +43,52 @@ public class UpFileUtils {
 
                     @Override
                     public void onResponse(Object response, int id) {
-                        upFileListener.Success(response.toString());
+                        upFileListener.Success(response.toString(), -1);
                     }
                 });
 
     }
 
+    public static void upImages(ArrayList<String> photos, final UpFileListener upFileListener) {
+        upImages(photos, upFileListener, 0);
+    }
+
+    public static void upImages(final ArrayList<String> photos, final UpFileListener upFileListener, final int index) {
+        if (index < photos.size()) {
+            File file;
+            if ((file = new File(photos.get(index))).exists()) {
+                OkHttpUtils.post()
+                        .addFile("uploadfile", "1.png", file)//
+                        .url(URL_RN_UP_IMAGE)
+                        .build()//
+                        .execute(new Callback() {
+                            @Override
+                            public void inProgress(float progress, long total, int id) {
+                                super.inProgress(progress, total, id);
+                                upFileListener.Progress(String.valueOf(Math.round(progress * 100)), index);
+                            }
+
+                            @Override
+                            public Object parseNetworkResponse(Response response, int id) throws Exception {
+                                return response.body().string();
+                            }
+
+                            @Override
+                            public void onError(Call call, Exception e, int id) {
+                                upFileListener.Failure(e.toString());
+                            }
+
+                            @Override
+                            public void onResponse(Object response, int id) {
+                                upFileListener.Success(response.toString(), index);
+                                upImages(photos, upFileListener, index + 1);
+                            }
+                        });
+            }else {//文件不存在就不用上传
+                upImages(photos, upFileListener, index + 1);
+            }
+        } else
+            upFileListener.Success("全部上传完成", -1);
+
+    }
 }

+ 2 - 0
app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java

@@ -280,4 +280,6 @@ public interface ApiService {
     Observable<BaseMessage> taskDesc(@Query("id") int id);
     @GET("app/credit/{id}")
     Observable<BaseMessage> getCredit(@Path("id") int id);
+    @POST("app/newbie_task/add_qq")
+    Observable<BaseMessage> newbieTaskAddQq(@Body JSONObject jsonObject);
 }

+ 26 - 0
app/src/main/java/com/sheep/gamegroup/util/Jump2View.java

@@ -9,6 +9,7 @@ import com.kfzs.duanduan.ActMain;
 import com.kfzs.duanduan.bean.KFIntentKeys;
 import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.CreditCard;
+import com.sheep.gamegroup.model.entity.NewbieTask;
 import com.sheep.gamegroup.model.entity.NewbieTaskRecord;
 import com.sheep.gamegroup.model.entity.TaskAcceptedEty;
 import com.sheep.gamegroup.model.entity.TaskEty;
@@ -41,6 +42,8 @@ import com.sheep.gamegroup.view.activity.PersonalCenterAct;
 import com.sheep.gamegroup.view.activity.PhoneAct;
 import com.sheep.gamegroup.view.activity.RealNameAuthenAct;
 import com.sheep.gamegroup.view.activity.TaskDetailAct;
+import com.sheep.gamegroup.view.activity.TaskDetailAddQQAct;
+import com.sheep.gamegroup.view.activity.TaskDetailCreditCardAct;
 import com.sheep.gamegroup.view.activity.TaskListAct;
 import com.sheep.gamegroup.view.activity.TryMakeMoneyact;
 import com.sheep.gamegroup.view.activity.WebviewAct;
@@ -323,6 +326,29 @@ public class Jump2View {
         intent.putExtra("task_entity", curTask);
         intent.putExtra("task_accepted_entity", runTask);
         context.startActivity(intent);
+        UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_DETAIL);
+    }
+    /**
+     * 跳转到信用卡任务详情界面
+     * @param context
+     * @param curTask
+     */
+    public synchronized void goCreditCardTaskDetail(Context context, TaskEty curTask){
+        Intent intent = new Intent(context, TaskDetailCreditCardAct.class);
+        intent.putExtra("task_entity", curTask);
+        context.startActivity(intent);
+        UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_DETAIL);
+    }
+    /**
+     * 跳转到新手加QQ群任务详情界面
+     * @param context
+     * @param task
+     */
+    public synchronized void goAddQQTaskDetail(Context context, NewbieTask task){
+        Intent intent = new Intent(context, TaskDetailAddQQAct.class);
+        intent.putExtra("task_entity", task);
+        context.startActivity(intent);
+        UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_DETAIL);
     }
 
     /**

+ 29 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/PersionInfoAct.java

@@ -14,15 +14,18 @@ import android.widget.ImageView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import com.alibaba.fastjson.JSONObject;
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.bumptech.glide.request.RequestOptions;
 import com.sheep.gamegroup.event.ImageHeadChange;
 import com.sheep.gamegroup.event.UserNameChange;
+import com.sheep.gamegroup.model.entity.BaseMessage;
 import com.sheep.gamegroup.model.entity.UserEntity;
 import com.sheep.gamegroup.util.AppUtil;
 import com.sheep.gamegroup.util.GlideImageLoader;
 import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.base.AbsChooseImageActivity;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
@@ -34,6 +37,9 @@ import org.greenrobot.eventbus.ThreadMode;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.OnClick;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.functions.Action1;
+import rx.schedulers.Schedulers;
 
 
 /**
@@ -213,6 +219,29 @@ public class PersionInfoAct extends AbsChooseImageActivity {
     }
 
     @Override
+    protected void onSetNetImageUrl(final String url) {
+        setLoaddingText("更新中");
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("avatar", url);
+        SheepApp.get(this).getNetComponent().getApiService().changeBaseInfo(jsonObject)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Action1<BaseMessage>() {
+                    @Override
+                    public void call(BaseMessage baseMessage) {
+                        setLoaddingText("完成");
+                        onGetNetImageUrl(url);
+                        dismissLoaddingDialog();
+                    }
+                }, new Action1<Throwable>() {
+                    @Override
+                    public void call(Throwable throwable) {
+                        updateError("失败");
+                    }
+                });
+    }
+
+    @Override
     protected void onGetNetImageUrl(String url) {
         ImageHeadChange imageHeadChange = new ImageHeadChange();
         imageHeadChange.setAvatar(url);

+ 303 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/TaskDetailAddQQAct.java

@@ -0,0 +1,303 @@
+package com.sheep.gamegroup.view.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.provider.MediaStore;
+import android.support.annotation.RequiresApi;
+import android.text.TextUtils;
+import android.view.View;
+import android.webkit.WebChromeClient;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import com.kfzs.appstore.utils.string.HexUtils;
+import com.kfzs.duanduan.datashare.DDProviderHelper;
+import com.kfzs.duanduan.datashare.provider.download.DownLoadInfo;
+import com.kfzs.duanduan.event.BigEvent;
+import com.kfzs.duanduan.event.EventTypes;
+import com.kfzs.duanduan.react.upfile.UpFileListener;
+import com.kfzs.duanduan.react.upfile.UpFileUtils;
+import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.CreditCard;
+import com.sheep.gamegroup.model.entity.NewbieTask;
+import com.sheep.gamegroup.model.entity.TaskEty;
+import com.sheep.gamegroup.model.entity.UploadResult;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.gamegroup.util.Jump2View;
+import com.sheep.gamegroup.util.TimeUtil;
+import com.sheep.gamegroup.util.UMConfigUtils;
+import com.sheep.gamegroup.view.dialog.DialogShowLoading;
+import com.sheep.jiuyan.samllsheep.BuildConfig;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.base.AbsChooseImageActivity;
+import com.sheep.jiuyan.samllsheep.page.WebActivity;
+import com.sheep.jiuyan.samllsheep.utils.G;
+import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
+import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+
+import org.greenrobot.eventbus.EventBus;
+
+import java.io.File;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import go.kfzssafe.Kfzssafe;
+import me.iwf.photopicker.PhotoPicker;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+/**
+ * 新手添加QQ群任务详情页面
+ * Created by realicing on 2018/4/26.
+ */
+
+public class TaskDetailAddQQAct extends AbsChooseImageActivity {
+
+    @BindView(R.id.detail_item_layout_1)
+    View detail_item_layout_1;
+    @BindView(R.id.detail_item_layout_2)
+    View detail_item_layout_2;
+    @BindView(R.id.detail_item_layout_3)
+    View detail_item_layout_3;
+    @BindView(R.id.name_tv)
+    TextView nameTv;
+    @BindView(R.id.date_tv)
+    TextView dateTv;
+    @BindView(R.id.price_tv)
+    TextView priceTv;
+    @BindView(R.id.detail_task_tv)
+    TextView detailTaskTv;
+    @BindView(R.id.web_text)
+    WebView webText;
+    @BindView(R.id.ll_infos)
+    LinearLayout llInfos;
+    @BindView(R.id.btn_task_item)
+    TextView btnTaskItem;
+    @BindView(R.id.btn_up_imag)
+    TextView btnUpImag;
+    @BindView(R.id.bottom_btn_layout)
+    LinearLayout bottom_btn_layout;
+    private Activity activity;
+
+    private NewbieTask taskEty;
+    private DialogShowLoading dialogShowLoading;
+
+    /**
+     * 上传进度
+     */
+    private boolean isUpload = true;
+
+    public void showChooseDialog() {
+        PhotoPicker.builder()
+                .setPhotoCount(7)
+                .setShowCamera(true)
+                .setShowGif(false)
+                .setPreviewEnabled(false)
+                .start(this, PhotoPicker.REQUEST_CODE);
+    }
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.task_detail_layout;
+    }
+
+    @Override
+    public void initView() {
+        activity = this;
+        taskEty = (NewbieTask) getIntent().getSerializableExtra("task_entity");
+        TitleBarUtils.getInstance()
+                .setTitle(activity, "加入官方QQ群任务详情")
+                .setTitleFinish(activity);
+        detail_item_layout_1.setVisibility(View.GONE);
+        detail_item_layout_3.setVisibility(View.GONE);
+    }
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void initData() {
+        if(taskEty == null){
+            G.showToast("网络异常,请稍候再试");
+//            finish();
+            return;
+        }
+        webText.setWebChromeClient(new WebChromeClient(){
+
+        });
+        webText.getSettings().setJavaScriptEnabled(true);
+
+// 1、LayoutAlgorithm.NARROW_COLUMNS : 适应内容大小
+// 2、LayoutAlgorithm.SINGLE_COLUMN:适应屏幕,内容将自动缩放
+//        webText.getSettings().setUseWideViewPort(true);
+//        webText.getSettings().setLoadWithOverviewMode(true);
+//        webText.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
+//        webText.setInitialScale(80);
+        webText.setWebViewClient(new WebViewClient(){
+            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+            @Override
+            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
+                view.loadDataWithBaseURL(null,request.getUrl().toString(), "text/html", "utf-8", null);
+                return true;
+            }
+        });
+        //封装头文件
+        String sHead=   "<html><head><meta name=\"viewport\" content=\"width=device-width, " +
+                "initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes\" />"+
+                "<style>img{max-width:100% !important;height:auto !important;}</style>"
+                +"<style>body{max-width:100% !important;}</style>"+"</head><body>";
+        webText.loadDataWithBaseURL(null,sHead + taskEty.getDesc() + "</body></html>", "text/html", "utf-8", null);
+
+
+        detailTaskTv.setVisibility(View.INVISIBLE);
+        bottom_btn_layout.setVisibility(View.VISIBLE);
+            btnTaskItem.setVisibility(View.GONE);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        // TODO: add setContentView(...) invocation
+        ButterKnife.bind(this);
+    }
+
+    @OnClick({R.id.detail_task_tv, R.id.web_text, R.id.ll_infos, R.id.btn_task_item, R.id.btn_up_imag})
+    public void onViewClicked(View view) {
+        switch (view.getId()) {
+            case R.id.web_text:
+                break;
+            case R.id.ll_infos:
+                break;
+            case R.id.btn_up_imag:
+                showChooseDialog();
+                UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_UPLOAD_PICTURE);
+                break;
+        }
+    }
+
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        //获取图片路径
+        if (requestCode == 1 && resultCode == Activity.RESULT_OK && data != null) {
+            Uri selectedImage = data.getData();
+            String[] filePathColumns = {MediaStore.Images.Media.DATA};
+            Cursor c = getContentResolver().query(selectedImage, filePathColumns, null, null, null);
+            c.moveToFirst();
+            int columnIndex = c.getColumnIndex(filePathColumns[0]);
+            String imagePath = c.getString(columnIndex);
+            if (isUpload) {
+                dialogShowLoading = DialogShowLoading.showDialog(activity);
+                UpFileUtils.upImage(new File(imagePath), TaskDetailAddQQAct.this);
+           }
+            c.close();
+        }
+    }
+
+    public void taskStatusSuccess(BaseMessage baseMessage) {
+        dialogShowLoading.getTextView().setText("完成");
+//                            onGetNetImageUrl(data);
+        dialogShowLoading.getAlertDialog().dismiss();
+        G.showToast("提交成功,等待审核!");
+        EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.ONFRESH_TRYMAKEMANY_PAGE));
+        UMConfigUtils.finishTask();
+        finish();
+    }
+
+    public void taskStatusFaile(BaseMessage baseMessage) {
+        updateError("失败");
+        G.showToast(baseMessage.getMsg()+"");
+
+    }
+
+    @Override
+    public void Success(String msg, int index) {
+        String json;
+        if (TextUtils.isEmpty(msg)) {
+            updateError("失败");
+            return;
+        }
+        if (msg.startsWith("{")) {
+            json = msg;
+        } else {
+            try {
+                byte[] bytes = HexUtils.hexStr2Bytes(msg);
+                byte[] byteDecode = Kfzssafe.XByteDecode(bytes);
+                json = new String(byteDecode);
+            } catch (Exception e) {
+                e.printStackTrace();
+                updateError("失败");
+                return;
+            }
+        }
+        UploadResult uploadResult = JSON.parseObject(json, UploadResult.class);
+        if (uploadResult != null) {
+            final String data = uploadResult.getData().getUrl();
+            dialogShowLoading.getTextView().setText("提交中");
+            newbieTaskAddQq(data);
+        }
+    }
+
+    public void newbieTaskAddQq(String ext) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("ext", ext);
+        SheepApp.getInstance().getNetComponent().getApiService().newbieTaskAddQq(jsonObject)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        taskStatusFaile(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        taskStatusSuccess(baseMessage);
+                    }
+                });
+    }
+
+    @Override
+    public void Failure(String err) {
+        G.showToast(err);
+    }
+
+    @Override
+    protected void onNotGetImage(String msg) {
+
+    }
+
+    @Override
+    protected void onGetImage(String path) {
+
+    }
+
+    @Override
+    protected void onSetNetImageUrl(String url) {
+
+    }
+
+    @Override
+    protected void onGetNetImageUrl(String url) {
+
+    }
+}

+ 434 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/TaskDetailCreditCardAct.java

@@ -0,0 +1,434 @@
+package com.sheep.gamegroup.view.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.provider.MediaStore;
+import android.support.annotation.RequiresApi;
+import android.text.TextUtils;
+import android.view.View;
+import android.webkit.WebChromeClient;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import com.kfzs.appstore.utils.string.HexUtils;
+import com.kfzs.duanduan.datashare.DDProviderHelper;
+import com.kfzs.duanduan.datashare.provider.download.DownLoadInfo;
+import com.kfzs.duanduan.event.BigEvent;
+import com.kfzs.duanduan.event.EventTypes;
+import com.kfzs.duanduan.react.upfile.UpFileListener;
+import com.kfzs.duanduan.react.upfile.UpFileUtils;
+import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.di.components.DaggerTaskDetailComponent;
+import com.sheep.gamegroup.di.modules.TaskDetailModule;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.entity.CreditCard;
+import com.sheep.gamegroup.model.entity.TaskAcceptedEty;
+import com.sheep.gamegroup.model.entity.TaskEty;
+import com.sheep.gamegroup.model.entity.UploadResult;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.gamegroup.presenter.TaskDetailContract;
+import com.sheep.gamegroup.presenter.TaskDetailPresenter;
+import com.sheep.gamegroup.util.Jump2View;
+import com.sheep.gamegroup.util.TimeUtil;
+import com.sheep.gamegroup.util.UMConfigUtils;
+import com.sheep.gamegroup.view.dialog.DialogShowLoading;
+import com.sheep.jiuyan.samllsheep.BuildConfig;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.page.WebActivity;
+import com.sheep.jiuyan.samllsheep.utils.G;
+import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
+import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+
+import org.greenrobot.eventbus.EventBus;
+
+import java.io.File;
+
+import javax.inject.Inject;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import go.kfzssafe.Kfzssafe;
+import me.iwf.photopicker.PhotoPicker;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+/**
+ * 信用卡任务详情页面
+ * Created by realicing on 2018/4/26.
+ */
+
+public class TaskDetailCreditCardAct extends BaseActivity implements UpFileListener {
+
+    @BindView(R.id.icon_iv)
+    ImageView iconIv;
+    @BindView(R.id.name_tv)
+    TextView nameTv;
+    @BindView(R.id.date_tv)
+    TextView dateTv;
+    @BindView(R.id.price_tv)
+    TextView priceTv;
+    @BindView(R.id.detail_task_tv)
+    TextView detailTaskTv;
+    @BindView(R.id.web_text)
+    WebView webText;
+    @BindView(R.id.ll_infos)
+    LinearLayout llInfos;
+    @BindView(R.id.btn_task_item)
+    TextView btnTaskItem;
+    @BindView(R.id.btn_up_imag)
+    TextView btnUpImag;
+    @BindView(R.id.bottom_btn_layout)
+    LinearLayout bottom_btn_layout;
+    private Activity activity;
+
+    private TaskEty taskEty;
+    private DialogShowLoading dialogShowLoading;
+
+    /**
+     * 上传进度
+     */
+    private boolean isUpload = true;
+    public void showChooseDialog() {
+        showChooseDialog(true, true);
+    }
+
+    public void showChooseDialog(boolean isCrop, boolean isUpload) {
+        this.isUpload = isUpload;
+        PhotoPicker.builder()
+                .setPhotoCount(1)
+                .setShowCamera(true)
+                .setShowGif(false)
+                .setPreviewEnabled(false)
+                .start(this, PhotoPicker.REQUEST_CODE);
+    }
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.task_detail_layout;
+    }
+
+    @Override
+    public void initView() {
+        activity = this;
+        taskEty = (TaskEty) getIntent().getSerializableExtra("task_entity");
+        TitleBarUtils.getInstance()
+                .setTitle(activity, "任务详情")
+                .setTitleFinish(activity);
+    }
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void initData() {
+        if(taskEty == null){
+            G.showToast("网络异常,请稍候再试");
+//            finish();
+            return;
+        }
+        webText.setWebChromeClient(new WebChromeClient(){
+
+        });
+        webText.getSettings().setJavaScriptEnabled(true);
+
+// 1、LayoutAlgorithm.NARROW_COLUMNS : 适应内容大小
+// 2、LayoutAlgorithm.SINGLE_COLUMN:适应屏幕,内容将自动缩放
+//        webText.getSettings().setUseWideViewPort(true);
+//        webText.getSettings().setLoadWithOverviewMode(true);
+//        webText.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
+//        webText.setInitialScale(80);
+        webText.setWebViewClient(new WebViewClient(){
+            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+            @Override
+            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
+                view.loadDataWithBaseURL(null,request.getUrl().toString(), "text/html", "utf-8", null);
+                return true;
+            }
+        });
+        //封装头文件
+        String sHead=   "<html><head><meta name=\"viewport\" content=\"width=device-width, " +
+                "initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes\" />"+
+                "<style>img{max-width:100% !important;height:auto !important;}</style>"
+                +"<style>body{max-width:100% !important;}</style>"+"</head><body>";
+        webText.loadDataWithBaseURL(null,sHead + taskEty.getDesc() + "</body></html>", "text/html", "utf-8", null);
+        nameTv.setText(taskEty.getName()+"");
+        priceTv.setText("+"+ taskEty.getBonus() +"元");
+        dateTv.setText(TimeUtil.getDate(TimeUtil.FORMAT, Long.valueOf(taskEty.getUpdate_time()))+"");
+
+
+        Glide.with(SheepApp.mContext)
+                .load(taskEty.getIcon())
+                .apply(new RequestOptions().placeholder(R.drawable.icon)
+                        .dontAnimate())
+                .into(iconIv);
+
+        taskSchedule();
+
+        if (taskEty.getRunTask() == 0 || taskEty.getInspect_type() == 1){
+            detailTaskTv.setVisibility(View.INVISIBLE);
+            bottom_btn_layout.setVisibility(View.VISIBLE);
+        }else {
+            detailTaskTv.setVisibility(View.VISIBLE);
+            bottom_btn_layout.setVisibility(View.VISIBLE);
+
+        }
+        if(taskEty.getTask_type() == 2){
+            btnTaskItem.setText("信用卡注册");
+        }else
+        if (PackageUtil.isAppInstalled(SheepApp.mContext, taskEty.getPackage_names())) {
+            btnTaskItem.setText("开始游戏");
+        }else if(!TextUtils.isEmpty(PackageUtil.isExistsFile(activity, taskEty.getPackage_names(), ""))){
+            btnTaskItem.setText("开始安装");
+        }
+        else {
+            DownLoadInfo downLoadInfo = DDProviderHelper.getInstance()
+                    .getDownloadTaskToPackname(activity, taskEty.getPackage_names());
+            if(downLoadInfo != null && !TextUtils.isEmpty(downLoadInfo.getMApkPath())){
+                btnTaskItem.setText("开始安装");
+            }else {
+                btnTaskItem.setText("下载游戏");
+            }
+
+        }
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        // TODO: add setContentView(...) invocation
+        ButterKnife.bind(this);
+    }
+
+    @OnClick({R.id.detail_task_tv, R.id.web_text, R.id.ll_infos, R.id.btn_task_item, R.id.btn_up_imag})
+    public void onViewClicked(View view) {
+        switch (view.getId()) {
+            case R.id.detail_task_tv://查看任务截图
+                if(TextUtils.isEmpty(taskEty.getScreenshots())){
+                    G.showToast("任务截图为空");
+                    return;
+                }
+                Intent intent = new Intent(activity, WebActivity.class);
+                intent.putExtra(WebActivity.INTENT_URL, taskEty.getScreenshots());
+                intent.putExtra(WebActivity.INTENT_TITLE, "任务提交示意");
+                startActivity(intent);
+                break;
+            case R.id.web_text:
+                break;
+            case R.id.ll_infos:
+                break;
+            case R.id.btn_task_item:
+                SheepApp.getInstance().getNetComponent().getApiService().getCredit(taskEty.getExt())
+                        .subscribeOn(Schedulers.io())
+                        .observeOn(AndroidSchedulers.mainThread())
+                        .subscribe(new SheepSubscriber<BaseMessage>(activity) {
+                            @Override
+                            public void onNext(BaseMessage baseMessage) {
+                                final CreditCard creditCard = baseMessage.getData(CreditCard.class);
+                                Jump2View.getInstance().goCreditCardWeb(activity, creditCard);
+                                if(BuildConfig.DEBUG)
+                                    System.out.println("baseMessage onNext "+JSON.toJSONString(baseMessage));
+                            }
+
+                            @Override
+                            public void onError(BaseMessage baseMessage) {
+                                if(BuildConfig.DEBUG)
+                                    System.out.println("baseMessage onError "+JSON.toJSONString(baseMessage));
+                                G.showToast(TextUtils.isEmpty(baseMessage.getMsg()) ? "服务器错误,请稍候再试" : baseMessage.getMsg());
+                            }
+                        });
+                break;
+            case R.id.btn_up_imag:
+                uploadImag();
+                UMConfigUtils.onEvent(UMConfigUtils.Event.TASK_UPLOAD_PICTURE);
+                break;
+        }
+    }
+
+    /**
+     * 任务进度
+     */
+    private void taskSchedule(){
+        llInfos.removeAllViews();
+        if (taskEty != null) {
+            int thisRun = taskEty.getRunTask();
+            if (thisRun == 1) {//接受了任务
+                llInfos.addView(getStep("领取任务", "已完成", 0));
+                if(taskEty.getTask_type() == 2){//信用卡
+                    llInfos.addView(getStep("信用卡注册", "待完成", 0));
+                }else if (PackageUtil.isAppInstalled(SheepApp.mContext, taskEty.getPackage_names())) {
+                    llInfos.addView(getStep("下载游戏", "已完成", 0));
+                    llInfos.addView(getStep("完成任务", "进行中", 1));
+                } else {
+                    llInfos.addView(getStep("下载游戏", "待完成", 2));
+                }
+            } else {
+                llInfos.addView(getStep("领取任务", "待完成", 2));
+            }
+        } else {
+            llInfos.addView(getStep("领取任务", "待完成", 2));
+        }
+    }
+
+
+    private View getStep(String step, String state, int color) {
+        View view = View.inflate(this, R.layout.task_step_info, null);
+        ImageView img = (ImageView) view.findViewById(R.id.img_tab);
+        TextView tvStep = (TextView) view.findViewById(R.id.tv_step);
+        TextView tvStatus = (TextView) view.findViewById(R.id.tv_status);
+        if (color == 0) {
+            img.setImageResource(R.drawable.garden_green);
+            tvStep.setTextColor(getResources().getColor(R.color.green));
+            tvStatus.setTextColor(getResources().getColor(R.color.green));
+        } else if (color == 1) {
+            img.setImageResource(R.drawable.garden_yellow);
+            tvStep.setTextColor(getResources().getColor(R.color.yellow_text_light));
+            tvStatus.setTextColor(getResources().getColor(R.color.yellow_text_light));
+        } else {
+            img.setImageResource(R.drawable.garden_gray);
+            tvStep.setTextColor(getResources().getColor(R.color.black_text_gray));
+            tvStatus.setTextColor(getResources().getColor(R.color.black_text_gray));
+        }
+
+        tvStep.setText(step);
+        tvStatus.setText(state);
+        return view;
+    }
+
+    /**
+     * update file
+     */
+    private void uploadImag() {
+//        Intent intent = new Intent(Intent.ACTION_PICK,
+//                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
+        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+        startActivityForResult(intent, 1);
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        //获取图片路径
+        if (requestCode == 1 && resultCode == Activity.RESULT_OK && data != null) {
+            Uri selectedImage = data.getData();
+            String[] filePathColumns = {MediaStore.Images.Media.DATA};
+            Cursor c = getContentResolver().query(selectedImage, filePathColumns, null, null, null);
+            c.moveToFirst();
+            int columnIndex = c.getColumnIndex(filePathColumns[0]);
+            String imagePath = c.getString(columnIndex);
+            if (isUpload) {
+                dialogShowLoading = DialogShowLoading.showDialog(activity);
+                UpFileUtils.upImage(new File(imagePath), TaskDetailCreditCardAct.this);
+           }
+            c.close();
+        }
+    }
+
+    public void taskStatusSuccess(BaseMessage baseMessage) {
+        dialogShowLoading.getTextView().setText("完成");
+//                            onGetNetImageUrl(data);
+        dialogShowLoading.getAlertDialog().dismiss();
+        G.showToast("提交成功,等待审核!");
+        EventBus.getDefault().post(new BigEvent().setEventTypes(EventTypes.ONFRESH_TRYMAKEMANY_PAGE));
+        UMConfigUtils.finishTask();
+        finish();
+    }
+
+    public void taskStatusFaile(BaseMessage baseMessage) {
+        updateError("失败");
+        G.showToast(baseMessage.getMsg()+"");
+
+    }
+
+    @Override
+    public void Success(String msg) {
+        String json;
+        if (TextUtils.isEmpty(msg)) {
+            updateError("失败");
+            return;
+        }
+        if (msg.startsWith("{")) {
+            json = msg;
+        } else {
+            try {
+                byte[] bytes = HexUtils.hexStr2Bytes(msg);
+                byte[] byteDecode = Kfzssafe.XByteDecode(bytes);
+                json = new String(byteDecode);
+            } catch (Exception e) {
+                e.printStackTrace();
+                updateError("失败");
+                return;
+            }
+        }
+        UploadResult uploadResult = JSON.parseObject(json, UploadResult.class);
+        if (uploadResult != null) {
+            final String data = uploadResult.getData().getUrl();
+            dialogShowLoading.getTextView().setText("提交中");
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("id", taskEty.getAcceptedTaskId());
+            jsonObject.put("screenshots",data+"");
+            jsonObject.put("remark",taskEty.getRemarks()+"");
+            jsonObject.put("package_name",taskEty.getPackage_names()+"");
+            jsonObject.put("status",7+"");
+            taskStatus(jsonObject);
+            taskEty.setScreenshots(data);
+//            try{
+//                MyDbManager.getInstance()
+//                        .saveOrUpdateUser(taskEty);
+//            }catch (Exception e){
+//                e.printStackTrace();
+//            }
+        }
+    }
+
+    public void taskStatus(JSONObject jsonObject) {
+        SheepApp.getInstance().getNetComponent().getApiService().taskStatus(jsonObject.getInteger("id"),jsonObject.getString("screenshots"),
+                jsonObject.getString("remark"),jsonObject.getString("package_name"),jsonObject.getString("status"))
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.mContext) {
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        taskStatusFaile(baseMessage);
+                    }
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        taskStatusSuccess(baseMessage);
+                    }
+                });
+    }
+    private void updateError(String msg) {
+        dialogShowLoading.getTextView().setText(msg);
+//        onNotGetImage(msg);
+        dialogShowLoading.getAlertDialog().dismiss();
+    }
+
+    @Override
+    public void Progress(String progress) {
+        dialogShowLoading.getTextView().setText(progress);
+        dialogShowLoading.getTextView().append("%");
+
+    }
+
+    @Override
+    public void Failure(String err) {
+        G.showToast(err);
+    }
+}

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/view/adapter/NewbieTaskAdp.java

@@ -115,7 +115,7 @@ public class NewbieTaskAdp extends BaseAdapter {
                     }
                     break;
                 case 6://加入官方QQ群
-                    G.showToast(R.string.coming_soon);
+                    Jump2View.getInstance().goAddQQTaskDetail(context, task);
                     break;
             }
         } else {

+ 66 - 37
app/src/main/java/com/sheep/jiuyan/samllsheep/base/AbsChooseImageActivity.java

@@ -20,6 +20,7 @@ import org.w3c.dom.Text;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.List;
 
 import go.kfzssafe.Kfzssafe;
 import me.iwf.photopicker.PhotoPicker;
@@ -35,16 +36,20 @@ import rx.schedulers.Schedulers;
 public abstract class AbsChooseImageActivity extends BaseActivity implements UpFileListener {
     private boolean isUpload = true;
     private boolean isCrop = true;
+    private int photoCount = 1;
     private DialogShowLoading dialogShowLoading;
 
     public void showChooseDialog() {
-        showChooseDialog(true, true);
+        showChooseDialog(true, true,1);
     }
 
-    public void showChooseDialog(boolean isCrop, boolean isUpload) {
+    public void showChooseDialog(boolean isCrop, boolean isUpload, int photoCount) {
+        photoCount = Math.max(1,photoCount);
         this.isUpload = isUpload;
+        this.isCrop = isCrop && photoCount == 1;
+        this.photoCount = photoCount;
         PhotoPicker.builder()
-                .setPhotoCount(1)
+                .setPhotoCount(photoCount)
                 .setShowCamera(true)
                 .setShowGif(false)
                 .setPreviewEnabled(false)
@@ -57,7 +62,7 @@ public abstract class AbsChooseImageActivity extends BaseActivity implements UpF
         if (resultCode == RESULT_OK) {
             if (requestCode == PhotoPicker.REQUEST_CODE) {//拍照或者选择照片
                 if (data != null) {
-                    ArrayList<String> photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS);
+                    photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS);
                     if (photos != null && !photos.isEmpty() && !TextUtils.isEmpty((path = photos.get(0)))) {
                         if (isCrop) {
                             UCrop.of(Uri.fromFile(new File(path)), Uri.fromFile(new File(new File(path).getParentFile(), "temp.png")))
@@ -89,23 +94,56 @@ public abstract class AbsChooseImageActivity extends BaseActivity implements UpF
                 notCrop();
         }
     }
-
+    private ArrayList<String> photos;
     private String path;
 
     private void notCrop() {
-        onGetImage(path);
-        if (isUpload) {
-            AbsChooseImageActivity.this.dialogShowLoading = DialogShowLoading.showDialog(AbsChooseImageActivity.this);
-            UpFileUtils.upImage(new File(path), AbsChooseImageActivity.this);
+        if(photoCount == 1) {
+            onGetImage(path);
+            if (isUpload) {
+                AbsChooseImageActivity.this.dialogShowLoading = DialogShowLoading.showDialog(AbsChooseImageActivity.this);
+                UpFileUtils.upImage(new File(path), AbsChooseImageActivity.this);
+            }
+        } else if(photos != null && !photos.isEmpty()){
+            StringBuffer stringBuffer = new StringBuffer();
+            for (int i = 0; i < photos.size(); i++) {
+                if(i != 0)
+                    stringBuffer.append(";");
+                stringBuffer.append(photos.get(i));
+            }
+            path = stringBuffer.toString();
+            onGetImage(path);
+            if (isUpload) {
+                AbsChooseImageActivity.this.dialogShowLoading = DialogShowLoading.showDialog(AbsChooseImageActivity.this);
+                UpFileUtils.upImages(photos, AbsChooseImageActivity.this);
+            }
+        } else {
+            onNotGetImage("没有数据");
         }
     }
 
+    private List<String> urls = new ArrayList<>();
     @Override
-    public void Success(String msg) {
+    public void Success(String msg, int index) {
+        if(index == -1) {
+        } else {
+            final String data = parseMsg(msg);
+
+            if (TextUtils.isEmpty(data)) {
+                updateError("失败");
+                return;
+            }
+            if(photoCount == 1) {
+                onSetNetImageUrl(data);
+            } else {
+                urls.add(data);
+            }
+        }
+    }
+    protected String parseMsg(String msg){
         String json;
         if (TextUtils.isEmpty(msg)) {
-            updateError("失败");
-            return;
+            return null;
         }
         if (msg.startsWith("{")) {
             json = msg;
@@ -116,43 +154,31 @@ public abstract class AbsChooseImageActivity extends BaseActivity implements UpF
                 json = new String(byteDecode);
             } catch (Exception e) {
                 e.printStackTrace();
-                updateError("失败");
-                return;
+                return null;
             }
         }
         UploadResult uploadResult = JSON.parseObject(json, UploadResult.class);
         if (uploadResult != null) {
-            final String data = uploadResult.getData().getUrl();
-            dialogShowLoading.getTextView().setText("更新中");
-            JSONObject jsonObject = new JSONObject();
-            jsonObject.put("avatar", data);
-            SheepApp.get(this).getNetComponent().getApiService().changeBaseInfo(jsonObject)
-                    .subscribeOn(Schedulers.io())
-                    .observeOn(AndroidSchedulers.mainThread())
-                    .subscribe(new Action1<BaseMessage>() {
-                        @Override
-                        public void call(BaseMessage baseMessage) {
-                            dialogShowLoading.getTextView().setText("完成");
-                            onGetNetImageUrl(data);
-                            dialogShowLoading.getAlertDialog().dismiss();
-                        }
-                    }, new Action1<Throwable>() {
-                        @Override
-                        public void call(Throwable throwable) {
-                            updateError("失败");
-                        }
-                    });
+            return uploadResult.getData().getUrl();
         }
+        return null;
+    }
+
+    protected void setLoaddingText(String msg) {
+        dialogShowLoading.getTextView().setText(msg);
+    }
+    protected void dismissLoaddingDialog() {
+        dialogShowLoading.getAlertDialog().dismiss();
     }
 
-    private void updateError(String msg) {
+    protected void updateError(String msg) {
         dialogShowLoading.getTextView().setText(msg);
         onNotGetImage(msg);
         dialogShowLoading.getAlertDialog().dismiss();
     }
 
     @Override
-    public void Progress(String progress) {
+    public void Progress(String progress, int index) {
         dialogShowLoading.getTextView().setText(progress);
         dialogShowLoading.getTextView().append("%");
     }
@@ -161,13 +187,16 @@ public abstract class AbsChooseImageActivity extends BaseActivity implements UpF
     public void Failure(String err) {
         onNotGetImage(err);
     }
-
+    //流程:获取图片、裁剪图片、上传图片、设置或者更新图片
     protected abstract void onNotGetImage(String msg);//失败后回调
 
     protected abstract void onGetImage(String path);//获取图片成功后回调
 
+    protected abstract void onSetNetImageUrl(String url);//获取图片、上传成功后回调--------设置或者更新图片
+
     protected abstract void onGetNetImageUrl(String url);//获取图片、上传成功并更新后回调
 
+
 }
 
 class Data {

+ 3 - 0
app/src/main/res/layout/task_detail_layout.xml

@@ -21,6 +21,7 @@
                 android:layout_height="match_parent"
                 android:orientation="vertical">
                 <RelativeLayout
+                    android:id="@+id/detail_item_layout_1"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:background="@drawable/x_shap_shadow_bg_rectgangle_white"
@@ -92,6 +93,7 @@
                 </RelativeLayout>
 
                 <LinearLayout
+                    android:id="@+id/detail_item_layout_2"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
                     android:background="@drawable/x_shap_shadow_bg_rectgangle_white"
@@ -115,6 +117,7 @@
                 </LinearLayout>
 
                 <LinearLayout
+                    android:id="@+id/detail_item_layout_3"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
                     android:background="@drawable/x_shap_shadow_bg_rectgangle_white"