浏览代码

对接机构评论接口

316044749 7 年之前
父节点
当前提交
d2b3e117f1
共有 21 个文件被更改,包括 832 次插入30 次删除
  1. 4 0
      app/src/main/AndroidManifest.xml
  2. 35 2
      app/src/main/java/com/ynstkz/shitu/android/activity/OrgDetailActivity.java
  3. 275 0
      app/src/main/java/com/ynstkz/shitu/android/activity/OrgWriteCommentActivity.java
  4. 60 0
      app/src/main/java/com/ynstkz/shitu/android/adapter/OrgCommentPicAdapter.java
  5. 12 0
      app/src/main/java/com/ynstkz/shitu/android/bean/OrgCommentSubmintBean.java
  6. 4 0
      app/src/main/java/com/ynstkz/shitu/android/common/Constants.java
  7. 19 0
      app/src/main/java/com/ynstkz/shitu/android/data/RequestGroup.java
  8. 5 0
      app/src/main/java/com/ynstkz/shitu/android/data/UrlCat.java
  9. 3 0
      app/src/main/java/com/ynstkz/shitu/android/fragment/HomeFragment.java
  10. 111 0
      app/src/main/java/com/ynstkz/shitu/android/utils/FileUtils.java
  11. 74 0
      app/src/main/java/com/ynstkz/shitu/android/utils/ImageUtils.java
  12. 39 0
      app/src/main/java/com/ynstkz/shitu/android/view/SelectPicDialog.java
  13. 二进制
      app/src/main/res/drawable-xxhdpi/comment_icon.png
  14. 二进制
      app/src/main/res/drawable-xxhdpi/pic_add_icon.png
  15. 8 0
      app/src/main/res/drawable/shape_comment_edit_bg.xml
  16. 44 0
      app/src/main/res/layout/activity_org_detail.xml
  17. 61 0
      app/src/main/res/layout/activity_writecomment.xml
  18. 13 0
      app/src/main/res/layout/item_org_comment_pic.xml
  19. 40 0
      app/src/main/res/layout/view_take_photo_dialog.xml
  20. 11 0
      app/src/main/res/values/styles.xml
  21. 14 28
      library/src/main/java/com/common/library/okhttp/builder/PostFormBuilder.java

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

@@ -137,6 +137,10 @@
         <activity android:name=".activity.OrgListActivity"
             android:screenOrientation="portrait"/>
 
+        <!--填写评价-->
+        <activity android:name=".activity.OrgWriteCommentActivity"
+            android:screenOrientation="portrait"/>
+
         <!--定位服务-->
         <meta-data android:name="com.amap.api.v2.apikey" android:value="45fb5d8b52ba4f9f214bfb4fdaf81a72"/>
         <service android:name="com.amap.api.location.APSService"/>

+ 35 - 2
app/src/main/java/com/ynstkz/shitu/android/activity/OrgDetailActivity.java

@@ -1,8 +1,12 @@
 package com.ynstkz.shitu.android.activity;
 
+import android.content.Intent;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v4.view.ViewPager;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.RelativeLayout;
@@ -13,11 +17,13 @@ import com.google.gson.Gson;
 import com.ynstkz.shitu.android.R;
 import com.ynstkz.shitu.android.adapter.OrgCourseListAdapter;
 import com.ynstkz.shitu.android.base.TitleBarActivity;
+import com.ynstkz.shitu.android.bean.CourseItemBean;
 import com.ynstkz.shitu.android.bean.OrgDetailBean;
 import com.ynstkz.shitu.android.data.RequestGroup;
 import com.ynstkz.shitu.android.view.ListViewForScrollView;
 
 import butterknife.Bind;
+import me.zhanghai.android.materialratingbar.MaterialRatingBar;
 import okhttp3.Call;
 import okhttp3.Response;
 
@@ -50,8 +56,15 @@ public class OrgDetailActivity extends TitleBarActivity {
     TextView tvCollectcount;
     @Bind(R.id.tv_address)
     TextView tvAddress;
+    @Bind(R.id.rb_score)
+    MaterialRatingBar rbScore;
+    @Bind(R.id.iv_write_comment)
+    ImageView ivWriteComment;
+    @Bind(R.id.tv_comment_list)
+    TextView tvCommentList;
 
     private int memberId;
+    private OrgDetailBean.DataBean dataBean;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -76,7 +89,27 @@ public class OrgDetailActivity extends TitleBarActivity {
     }
 
     private void setListener() {
+        //课程列表
+        lvCourse.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
+                CourseItemBean courseItemBean = (CourseItemBean) adapterView.getAdapter().getItem(i);
+                Intent intent = new Intent(OrgDetailActivity.this, CourseDetailActivity.class);
+                intent.putExtra("courseId", courseItemBean.getCourseId());
+                startActivity(intent);
+            }
+        });
 
+        //写评论
+        ivWriteComment.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                Intent intent = new Intent(OrgDetailActivity.this, OrgWriteCommentActivity.class);
+                intent.putExtra("memberId", memberId + "");
+                intent.putExtra("memberTitle", dataBean.getMemberName());
+                startActivity(intent);
+            }
+        });
     }
 
     /**
@@ -120,7 +153,7 @@ public class OrgDetailActivity extends TitleBarActivity {
         if (orgDetailBean == null || orgDetailBean.getData() == null) {
             return;
         }
-        OrgDetailBean.DataBean dataBean = orgDetailBean.getData();
+        dataBean = orgDetailBean.getData();
         tvTitle.setText(dataBean.getMemberName());
         tvOrgName.setText(dataBean.getMemberName());
         tvOrgPhone.setText(dataBean.getPhone());
@@ -129,7 +162,7 @@ public class OrgDetailActivity extends TitleBarActivity {
         tvOrgDesc.setText(dataBean.getIntroduction());
 
         //课程信息
-        if(dataBean.getCourseList() != null && dataBean.getCourseList().size() > 0){
+        if (dataBean.getCourseList() != null && dataBean.getCourseList().size() > 0) {
             OrgCourseListAdapter orgCourseListAdapter = new OrgCourseListAdapter(this, dataBean.getCourseList());
             lvCourse.setAdapter(orgCourseListAdapter);
             orgCourseListAdapter.notifyDataSetChanged();

+ 275 - 0
app/src/main/java/com/ynstkz/shitu/android/activity/OrgWriteCommentActivity.java

@@ -0,0 +1,275 @@
+package com.ynstkz.shitu.android.activity;
+
+import android.app.ProgressDialog;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.MediaStore;
+import android.support.annotation.Nullable;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.GridView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.common.library.okhttp.callback.Callback;
+import com.google.gson.Gson;
+import com.ynstkz.shitu.android.R;
+import com.ynstkz.shitu.android.adapter.OrgCommentPicAdapter;
+import com.ynstkz.shitu.android.base.TitleBarActivity;
+import com.ynstkz.shitu.android.bean.OrgCommentSubmintBean;
+import com.ynstkz.shitu.android.data.RequestGroup;
+import com.ynstkz.shitu.android.utils.FileUtils;
+import com.ynstkz.shitu.android.utils.ImageUtils;
+import com.ynstkz.shitu.android.view.SelectPicDialog;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import butterknife.Bind;
+import me.zhanghai.android.materialratingbar.MaterialRatingBar;
+import okhttp3.Call;
+import okhttp3.Response;
+
+/**
+ * 作者:fuchangle on 2018/3/14 15:16
+ */
+
+public class OrgWriteCommentActivity extends TitleBarActivity implements View.OnClickListener{
+
+    /** 请求相册 */
+    public static final int REQUEST_CODE_GETIMAGE_BYSDCARD = 0;
+    /** 请求相机 */
+    public static final int REQUEST_CODE_GETIMAGE_BYCAMERA = 1;
+    /** 请求裁剪 */
+    public static final int REQUEST_CODE_GETIMAGE_BYCROP = 2;
+
+    @Bind(R.id.tv_title)
+    TextView tvTitle;
+    @Bind(R.id.view_title)
+    RelativeLayout viewTitle;
+    @Bind(R.id.rb_score)
+    MaterialRatingBar rbScore;
+    @Bind(R.id.edit_content)
+    EditText editContent;
+    @Bind(R.id.gv_pic)
+    GridView gvPic;
+    @Bind(R.id.btn_submint)
+    Button btnSubmint;
+    private String memberId;
+
+    private List<File> listFiles;
+    private Map<String, File> fileParam;
+    private boolean isTakeFull;
+    private SelectPicDialog selectPicDialog;
+    private OrgCommentPicAdapter orgCommentPicAdapter;
+    private ProgressDialog progressDialog;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        initView();
+        initData();
+        setListener();
+    }
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.activity_writecomment;
+    }
+
+
+    private void initView() {
+        tvTitle.setText(getIntent().getStringExtra("memberTitle"));
+    }
+
+    private void initData() {
+        memberId = getIntent().getStringExtra("memberId");
+
+        listFiles = new ArrayList<>();
+        fileParam = new HashMap<>();
+        Bitmap bitmap = ImageUtils.drawableToBitmap(getResources().getDrawable(R.drawable.pic_add_icon));
+        listFiles.add(ImageUtils.saveBitmapToPic(bitmap, "pic_add_icon"));
+        orgCommentPicAdapter = new OrgCommentPicAdapter(OrgWriteCommentActivity.this, listFiles);
+        gvPic.setAdapter(orgCommentPicAdapter);
+        orgCommentPicAdapter.notifyDataSetChanged();
+    }
+
+
+    private void setListener() {
+
+        gvPic.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
+                if (position == listFiles.size() - 1 && !isTakeFull) {
+                    if (selectPicDialog == null) {
+                        selectPicDialog = new SelectPicDialog(OrgWriteCommentActivity.this, OrgWriteCommentActivity.this);
+                    }
+                    selectPicDialog.show();
+                }
+            }
+        });
+
+        btnSubmint.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                String content = editContent.getText().toString().trim();
+                String score = rbScore.getProgress() + "";
+
+                progressDialog = new ProgressDialog(OrgWriteCommentActivity.this);
+                progressDialog.setMessage("正在提交...");
+                progressDialog.show();
+                submintOrgComment(memberId, score, content, fileParam);
+            }
+        });
+    }
+
+    /**
+     * 提交机构评论
+     *
+     * @param memberId
+     * @param score
+     * @param content
+     * @param files
+     */
+    private void submintOrgComment(String memberId, String score, String content, Map<String, File> files) {
+
+        RequestGroup.submintOrgComment(memberId, score, content, files, new Callback() {
+            @Override
+            public Object parseNetworkResponse(Response response, int id) throws Exception {
+                return new Gson().fromJson(response.body().string(), OrgCommentSubmintBean.class);
+            }
+
+            @Override
+            public void onError(Call call, Exception e, int id) {
+                progressDialog.dismiss();
+                showToast(e.getMessage());
+            }
+
+            @Override
+            public void onResponse(Object response, int id) {
+                OrgCommentSubmintBean orgCommentSubmintBean = (OrgCommentSubmintBean)response;
+                if(orgCommentSubmintBean != null){
+                    if("200".equals(orgCommentSubmintBean.getCode())){
+                        showToast("success");
+                    } else {
+                        showToast(orgCommentSubmintBean.getMsg());
+                    }
+                }
+            }
+        });
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.take_photo_layout:
+                closePopDialog();
+                startActionCamera();
+                break;
+            case R.id.choose_from_gallery_layout:
+                closePopDialog();
+                startImagePick();
+                break;
+        }
+    }
+
+    private void closePopDialog() {
+        if (selectPicDialog != null && selectPicDialog.isShowing()) {
+            selectPicDialog.dismiss();
+        }
+    }
+
+    /**
+     * 相机拍照
+     */
+    private void startActionCamera() {
+        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+        startActivityForResult(intent, REQUEST_CODE_GETIMAGE_BYCAMERA);
+    }
+
+    /**
+     * 选择图片裁剪
+     */
+    private void startImagePick() {
+        Intent intent = new Intent(Intent.ACTION_PICK);
+        intent.setType("image/*");
+        startActivityForResult(Intent.createChooser(intent, "选择图片"),
+                REQUEST_CODE_GETIMAGE_BYCAMERA);
+    }
+
+    /**
+     * 拍照后裁剪
+     *
+     * @param data 原始图片
+     *             裁剪后图片
+     */
+    private void startActionCrop(Uri data) {
+        Intent intent = new Intent("com.android.camera.action.CROP");
+        intent.setDataAndType(data, "image/*");
+        intent.putExtra("crop", "true");
+        intent.putExtra("aspectX", 1);// 裁剪框比例
+        intent.putExtra("aspectY", 1);
+        intent.putExtra("outputX", 200);// 输出图片大小
+        intent.putExtra("outputY", 200);
+        intent.putExtra("scale", true);// 去黑边
+        intent.putExtra("scaleUpIfNeeded", true);// 去黑边
+        intent.putExtra("return-data", true);
+        startActivityForResult(intent,
+                REQUEST_CODE_GETIMAGE_BYSDCARD);
+    }
+
+    /**
+     * 添加图片
+     * @param file
+     */
+    private void addTakeImage(File file) {
+        listFiles.add(listFiles.size() - 1, file);
+        fileParam.put(System.currentTimeMillis() + "", file);
+        if (listFiles.size() > 3) {
+            isTakeFull = true;
+            listFiles.remove(3);
+        }
+        orgCommentPicAdapter.notifyDataSetChanged();
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        switch (requestCode){
+            case REQUEST_CODE_GETIMAGE_BYCAMERA:
+                if (data != null) {
+                    if (data.getData() != null) {
+                        startActionCrop(data.getData());
+                    } else {
+                        Bitmap bitMap = data.getParcelableExtra("data");
+                        if (bitMap != null) {
+                            startActionCrop(Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitMap, null, null)));
+                        }
+                    }
+                }
+                break;
+            case REQUEST_CODE_GETIMAGE_BYSDCARD:
+                if (data != null) {
+                    if (data.getData() != null) {
+                        File takeFile = FileUtils.from(this, data.getData());
+                        if (takeFile != null) {
+                            addTakeImage(takeFile);
+                        }
+                    } else {
+                        Bitmap bitMap = data.getParcelableExtra("data");
+                        File takeFile = ImageUtils.saveBitmapToPic(bitMap, "win_pic" + System.currentTimeMillis());
+                        if (takeFile != null) {
+                            addTakeImage(takeFile);
+                        }
+                    }
+                }
+                break;
+        }
+    }
+}

+ 60 - 0
app/src/main/java/com/ynstkz/shitu/android/adapter/OrgCommentPicAdapter.java

@@ -0,0 +1,60 @@
+package com.ynstkz.shitu.android.adapter;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.bumptech.glide.Glide;
+import com.common.library.adapter.CCAdapterHolder;
+import com.common.library.adapter.CCListAdapter;
+import com.ynstkz.shitu.android.R;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * 作者:fuchangle on 2018/3/15 11:42
+ */
+
+public class OrgCommentPicAdapter extends CCListAdapter<File>{
+
+
+    private Context context;
+    private List<File> adapterContent;
+
+    /**
+     * Construct list adapter.
+     *
+     * @param context        Context.
+     * @param adapterContent Content to display.
+     */
+    public OrgCommentPicAdapter(Context context, List<File> adapterContent) {
+        super(context, adapterContent);
+        this.context = context;
+        this.adapterContent = adapterContent;
+    }
+
+    @Override
+    public CCAdapterHolder<File> createHolder(int type) {
+
+        return new CCAdapterHolder<File>() {
+
+            ImageView ivPic;
+
+            @Override
+            public int getResource() {
+                return R.layout.item_org_comment_pic;
+            }
+
+            @Override
+            public void initializeView(View convertView) {
+                ivPic = convertView.findViewById(R.id.iv_takepic);
+            }
+
+            @Override
+            public void updateView(File content, int position) {
+                Glide.with(context).load(content).into(ivPic);
+            }
+        };
+    }
+}

+ 12 - 0
app/src/main/java/com/ynstkz/shitu/android/bean/OrgCommentSubmintBean.java

@@ -0,0 +1,12 @@
+package com.ynstkz.shitu.android.bean;
+
+import com.ynstkz.shitu.android.base.BaseBean;
+
+/**
+ * 作者:fuchangle on 2018/3/15 15:04
+ */
+
+public class OrgCommentSubmintBean extends BaseBean{
+
+
+}

+ 4 - 0
app/src/main/java/com/ynstkz/shitu/android/common/Constants.java

@@ -14,6 +14,10 @@ public class Constants {
 
     public static final String DOWNLOAD_IMAGE_NAME = "image";
 
+    //昆明火车站经纬度
+    public static final String KM_LONGITUDE = "102.722247";
+    public static final String KM_LATITUDE = "25.015298";
+
     public static final String QQ_KEY = "1106743412";
 
     public static final String QQ_SECRET = "KEYaREJsqSU3Ep4msfM";

+ 19 - 0
app/src/main/java/com/ynstkz/shitu/android/data/RequestGroup.java

@@ -7,6 +7,8 @@ import com.common.library.okhttp.OkHttpUtils;
 import com.common.library.okhttp.callback.Callback;
 import com.google.gson.Gson;
 
+import java.io.File;
+import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -327,4 +329,21 @@ public class RequestGroup {
         OkHttpUtils.get().url(UrlCat.URL_MY_SIGUP).addHeader(KEY_TOKEN,
                 SharedPreferencesUtils.getToken()).params(params).build().execute(callback);
     }
+
+    /**
+     * 提交机构评论
+     * @param memberId
+     * @param score
+     * @param content
+     * @param files
+     * @param callback
+     */
+    public static void submintOrgComment(String memberId, String score, String content, Map<String, File> files, Callback callback){
+        Map<String, String> params = getSystemParams();
+        params.put("memberId", memberId);
+        params.put("score", score);
+        params.put("content", content);
+        OkHttpUtils.post().url(UrlCat.URL_COMMENT_SUBMIT).addHeader(KEY_TOKEN,
+                SharedPreferencesUtils.getToken()).files("picList", files).build().execute(callback);
+    }
 }

+ 5 - 0
app/src/main/java/com/ynstkz/shitu/android/data/UrlCat.java

@@ -137,6 +137,11 @@ public class UrlCat {
      * 我的报名
      */
     public static final String URL_MY_SIGUP = HOST + "api/apply/my/list";
+
+    /**
+     * 机构评论
+     */
+    public static final String URL_COMMENT_SUBMIT = HOST + "api/evaluate/submit";
 }
 
 

+ 3 - 0
app/src/main/java/com/ynstkz/shitu/android/fragment/HomeFragment.java

@@ -43,6 +43,7 @@ import com.ynstkz.shitu.android.bean.CourseNavigationBean;
 import com.ynstkz.shitu.android.bean.HomeBannerBean;
 import com.ynstkz.shitu.android.bean.OrgItemBean;
 import com.ynstkz.shitu.android.bean.OrgRecommendListBean;
+import com.ynstkz.shitu.android.common.Constants;
 import com.ynstkz.shitu.android.data.RequestGroup;
 import com.ynstkz.shitu.android.event.LocationChangedEvent;
 import com.ynstkz.shitu.android.view.ScrollViewWithGridView;
@@ -116,6 +117,8 @@ public class HomeFragment extends BaseFragment implements PullToRefreshBase.OnRe
         getBannerData();
         //获取机构导航
         getOrgNavigation();
+        //获取推荐结构,默认昆明火车站
+        getOrgRecommendList(Constants.KM_LONGITUDE + "," + Constants.KM_LATITUDE);
     }
 
     private void setListener() {

+ 111 - 0
app/src/main/java/com/ynstkz/shitu/android/utils/FileUtils.java

@@ -1,6 +1,10 @@
 package com.ynstkz.shitu.android.utils;
 
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
 import android.os.Environment;
+import android.provider.OpenableColumns;
 import android.util.Log;
 
 import com.ynstkz.shitu.android.application.STApplication;
@@ -8,6 +12,11 @@ import com.ynstkz.shitu.android.common.Constants;
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.text.DecimalFormat;
 
 /**
@@ -16,6 +25,8 @@ import java.text.DecimalFormat;
 
 public class FileUtils {
 
+    private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
+
     /**
      * 是否存在内存卡判断
      *
@@ -170,4 +181,104 @@ public class FileUtils {
             }
         }
     }
+
+    /**
+     * 获取文件
+     * @param context
+     * @param uri
+     * @return
+     * @throws IOException
+     */
+    public static File from(Context context, Uri uri){
+        try {
+            InputStream inputStream = context.getContentResolver().openInputStream(uri);
+            String fileName = getFileName(context, uri);
+            File tempFile = new File(getImageFileSavePath() +fileName);
+            FileOutputStream out = null;
+            try {
+                out = new FileOutputStream(tempFile);
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            }
+            if (inputStream != null) {
+                copy(inputStream, out);
+                inputStream.close();
+            }
+
+            if (out != null) {
+                out.close();
+            }
+            return tempFile;
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 获取文件名
+     * @param context
+     * @param uri
+     * @return
+     */
+    public static String getFileName(Context context, Uri uri) {
+        String result = null;
+        if (uri.getScheme().equals("content")) {
+            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
+            try {
+                if (cursor != null && cursor.moveToFirst()) {
+                    result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+        }
+        if (result == null) {
+            result = uri.getPath();
+            int cut = result.lastIndexOf(File.separator);
+            if (cut != -1) {
+                result = result.substring(cut + 1);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 获取文件保存路径
+     *
+     * @return
+     */
+    public static String getImageFileSavePath() {
+        return Environment
+                .getExternalStorageDirectory().getAbsolutePath()
+                + "/shitu/Portrait/";
+    }
+
+    static int copy(InputStream input, OutputStream output) throws IOException {
+        long count = copyLarge(input, output);
+        if (count > Integer.MAX_VALUE) {
+            return -1;
+        }
+        return (int) count;
+    }
+
+    public static long copyLarge(InputStream input, OutputStream output)
+            throws IOException {
+        return copyLarge(input, output, new byte[DEFAULT_BUFFER_SIZE]);
+    }
+
+    static long copyLarge(InputStream input, OutputStream output, byte[] buffer)
+            throws IOException {
+        long count = 0;
+        int n;
+        while (-1 != (n = input.read(buffer))) {
+            output.write(buffer, 0, n);
+            count += n;
+        }
+        return count;
+    }
 }

+ 74 - 0
app/src/main/java/com/ynstkz/shitu/android/utils/ImageUtils.java

@@ -0,0 +1,74 @@
+package com.ynstkz.shitu.android.utils;
+
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.PixelFormat;
+import android.graphics.drawable.Drawable;
+import android.os.Environment;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * 作者:fuchangle on 2018/3/15 14:02
+ */
+
+public class ImageUtils {
+
+    /**
+     * drawable转bitmap
+     * @param drawable
+     * @return
+     */
+    public static Bitmap drawableToBitmap(Drawable drawable) { // drawable 转换成bitmap
+        int width = drawable.getIntrinsicWidth();// 取drawable的长宽
+        int height = drawable.getIntrinsicHeight();
+        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;// 取drawable的颜色格式
+        Bitmap bitmap = Bitmap.createBitmap(width, height, config);// 建立对应bitmap
+        Canvas canvas = new Canvas(bitmap);// 建立对应bitmap的画布
+        drawable.setBounds(0, 0, width, height);
+        drawable.draw(canvas);// 把drawable内容画到画布中
+        return bitmap;
+    }
+
+
+    /**
+     * 将图片转换为image
+     * @param mBitmap
+     * @param bitName
+     * @return
+     */
+    public static File saveBitmapToPic(Bitmap mBitmap, String bitName){
+        File f = null;
+        if (android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment
+                .getExternalStorageState())) {
+            String path = Environment.getExternalStorageDirectory() + File.separator + "image" + File.separator;
+            File fileDir = new File(path);
+            if (!fileDir.exists()) {
+                fileDir.mkdir();
+            }
+
+            f = new File( path + bitName + ".jpg");
+            FileOutputStream fOut = null;
+            try {
+                fOut = new FileOutputStream(f);
+            } catch (Exception e){
+                e.printStackTrace();
+                return null;
+            }
+            mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
+            try {
+                fOut.flush();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            try {
+                fOut.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return f;
+    }
+}

+ 39 - 0
app/src/main/java/com/ynstkz/shitu/android/view/SelectPicDialog.java

@@ -0,0 +1,39 @@
+package com.ynstkz.shitu.android.view;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.common.library.utils.PixelUtil;
+import com.ynstkz.shitu.android.R;
+
+/**
+ * 作者:fuchangle on 2018/3/15 14:21
+ */
+
+public class SelectPicDialog extends Dialog {
+
+    private View btn_cancel;
+    private View btn_pick_photo;
+    private View btn_take_photo;
+
+    public SelectPicDialog (Activity context, View.OnClickListener onClickListener){
+        super(context, R.style.dialog_normal);
+        setCanceledOnTouchOutside(true);
+        setContentView(R.layout.view_take_photo_dialog);
+        getWindow().setLayout((PixelUtil.getScreenWidth(context)), ViewGroup.LayoutParams.WRAP_CONTENT);
+        getWindow().setGravity(Gravity.BOTTOM);
+        btn_take_photo = findViewById(R.id.take_photo_layout);
+        btn_pick_photo = findViewById(R.id.choose_from_gallery_layout);
+        btn_cancel = findViewById(R.id.cancel_layout);
+        btn_cancel.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View paramView) {
+                dismiss();
+            }
+        });
+        btn_pick_photo.setOnClickListener(onClickListener);
+        btn_take_photo.setOnClickListener(onClickListener);
+    }
+}

二进制
app/src/main/res/drawable-xxhdpi/comment_icon.png


二进制
app/src/main/res/drawable-xxhdpi/pic_add_icon.png


+ 8 - 0
app/src/main/res/drawable/shape_comment_edit_bg.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@android:color/transparent" />
+    <corners android:radius="10dip"/>
+    <stroke
+        android:width="1dip"
+        android:color="#999999" />
+</shape>

+ 44 - 0
app/src/main/res/layout/activity_org_detail.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@color/default_bg"
@@ -157,6 +158,49 @@
                 android:orientation="vertical"
                 android:padding="@dimen/default_content_margin">
 
+                <RelativeLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal">
+
+                    <me.zhanghai.android.materialratingbar.MaterialRatingBar
+                        android:id="@+id/rb_score"
+                        android:layout_width="@dimen/company_90dp"
+                        android:layout_height="@dimen/company_20dp"
+                        android:layout_below="@+id/tv_memberName"
+                        android:layout_marginTop="@dimen/company_5dp"
+                        android:isIndicator="true"
+                        app:mrb_progressTint="@color/rb_color"
+                        app:mrb_secondaryProgressTint="@color/color_999"
+                        android:stepSize="0.5"
+                        style="@style/Widget.MaterialRatingBar.RatingBar" />
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_alignParentRight="true"
+                        android:layout_centerVertical="true"
+                        android:orientation="horizontal"
+                        android:gravity="center_vertical">
+
+                        <ImageView
+                            android:id="@+id/iv_write_comment"
+                            android:layout_width="@dimen/company_20dp"
+                            android:layout_height="@dimen/company_20dp"
+                            android:background="@drawable/comment_icon"
+                            android:layout_marginRight="@dimen/company_10dp"/>
+
+                        <TextView
+                            android:id="@+id/tv_comment_list"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:textSize="@dimen/company_13sp"
+                            android:textColor="@color/color_666"
+                            android:text="0条评论"/>
+
+                    </LinearLayout>
+
+                </RelativeLayout>
 
             </LinearLayout>
 

+ 61 - 0
app/src/main/res/layout/activity_writecomment.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <include layout="@layout/view_title"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="@dimen/default_content_margin">
+
+        <me.zhanghai.android.materialratingbar.MaterialRatingBar
+            android:id="@+id/rb_score"
+            android:layout_width="@dimen/company_200dp"
+            android:layout_height="@dimen/company_40dp"
+            android:layout_marginTop="@dimen/company_5dp"
+            android:layout_gravity="center_horizontal"
+            app:mrb_progressTint="@color/rb_color"
+            app:mrb_secondaryProgressTint="@color/color_999"
+            android:stepSize="1"
+            style="@style/Widget.MaterialRatingBar.RatingBar" />
+
+        <EditText
+            android:id="@+id/edit_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="left|top"
+            android:inputType="textMultiLine"
+            android:hint="评价内容"
+            android:minLines="5"
+            android:textColor="@color/color_999"
+            android:padding="@dimen/company_5dp"
+            android:layout_marginTop="@dimen/company_20dp"
+            android:background="@drawable/shape_comment_edit_bg"/>
+
+        <GridView
+            android:id="@+id/gv_pic"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/company_20dp"
+            android:numColumns="3"/>
+
+        <Button
+            android:id="@+id/btn_submint"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/company_20dp"
+            android:layout_marginLeft="@dimen/default_content_margin"
+            android:layout_marginRight="@dimen/default_content_margin"
+            android:background="@drawable/shape_default_btn_bg"
+            android:textColor="@color/white"
+            android:textSize="@dimen/company_16sp"
+            android:text="发表"/>
+
+    </LinearLayout>
+
+</LinearLayout>

+ 13 - 0
app/src/main/res/layout/item_org_comment_pic.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/iv_takepic"
+        android:layout_width="@dimen/company_80dp"
+        android:layout_height="@dimen/company_80dp"
+        android:scaleType="fitXY"/>
+
+</RelativeLayout>

+ 40 - 0
app/src/main/res/layout/view_take_photo_dialog.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/pop_layout"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/white"
+    android:orientation="vertical"
+    android:padding="20dp">
+
+    <TextView
+        android:id="@+id/take_photo_layout"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="20dp"
+        android:gravity="center_horizontal"
+        android:textSize="@dimen/company_16sp"
+        android:textColor="@color/main_color"
+        android:text="拍照"/>
+
+    <TextView
+        android:id="@+id/choose_from_gallery_layout"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="20dp"
+        android:gravity="center_horizontal"
+        android:textSize="@dimen/company_16sp"
+        android:textColor="@color/main_color"
+        android:text="从手机相册选取" />
+
+    <TextView
+        android:id="@+id/cancel_layout"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_horizontal"
+        android:textSize="@dimen/company_16sp"
+        android:textColor="@color/main_color"
+        android:text="取消" />
+
+
+</LinearLayout>

+ 11 - 0
app/src/main/res/values/styles.xml

@@ -21,4 +21,15 @@
         <item name="android:colorForeground">@color/color_666</item>
     </style>
 
+    <style name="dialog_normal" parent="@android:style/Theme.Dialog">
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowIsTranslucent">false</item>
+        <item name="android:windowFullscreen">true</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:backgroundDimEnabled">true</item>
+        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
+    </style>
+
 </resources>

+ 14 - 28
library/src/main/java/com/common/library/okhttp/builder/PostFormBuilder.java

@@ -15,51 +15,43 @@ import com.common.library.okhttp.request.RequestCall;
 /**
  * Created by zhy on 15/12/14.
  */
-public class PostFormBuilder extends OkHttpRequestBuilder<PostFormBuilder> implements HasParamsable
-{
+public class PostFormBuilder extends OkHttpRequestBuilder<PostFormBuilder> implements HasParamsable {
     private List<FileInput> files = new ArrayList<>();
 
     @Override
-    public RequestCall build()
-    {
-        if(Constants.DEVELOP_MODE){
-            Log.i("okhttp",new StringBuilder("url= ").append(url).append("?")
+    public RequestCall build() {
+        if (Constants.DEVELOP_MODE) {
+            Log.i("okhttp", new StringBuilder("url= ").append(url).append("?")
                     .append(params).toString());
         }
-        return new PostFormRequest(url, tag, params, headers, files,id).build();
+        return new PostFormRequest(url, tag, params, headers, files, id).build();
     }
 
-    public PostFormBuilder files(String key, Map<String, File> files)
-    {
-        for (String filename : files.keySet())
-        {
+    public PostFormBuilder files(String key, Map<String, File> files) {
+        for (String filename : files.keySet()) {
             this.files.add(new FileInput(key, filename, files.get(filename)));
         }
         return this;
     }
 
-    public PostFormBuilder addFile(String name, String filename, File file)
-    {
+    public PostFormBuilder addFile(String name, String filename, File file) {
         files.add(new FileInput(name, filename, file));
         return this;
     }
 
-    public static class FileInput
-    {
+    public static class FileInput {
         public String key;
         public String filename;
         public File file;
 
-        public FileInput(String name, String filename, File file)
-        {
+        public FileInput(String name, String filename, File file) {
             this.key = name;
             this.filename = filename;
             this.file = file;
         }
 
         @Override
-        public String toString()
-        {
+        public String toString() {
             return "FileInput{" +
                     "key='" + key + '\'' +
                     ", filename='" + filename + '\'' +
@@ -69,19 +61,15 @@ public class PostFormBuilder extends OkHttpRequestBuilder<PostFormBuilder> imple
     }
 
 
-
     @Override
-    public PostFormBuilder params(Map<String, String> params)
-    {
+    public PostFormBuilder params(Map<String, String> params) {
         this.params = params;
         return this;
     }
 
     @Override
-    public PostFormBuilder addParams(String key, String val)
-    {
-        if (this.params == null)
-        {
+    public PostFormBuilder addParams(String key, String val) {
+        if (this.params == null) {
             params = new LinkedHashMap<>();
         }
         params.put(key, val);
@@ -89,6 +77,4 @@ public class PostFormBuilder extends OkHttpRequestBuilder<PostFormBuilder> imple
     }
 
 
-
-
 }