DESKTOP-SADJPBG\47462 před 5 roky
rodič
revize
e1573610ee

binární
.idea/caches/build_file_checksums.ser


+ 1 - 1
.idea/vcs.xml

xqd
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="" />
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
   </component>
 </project>

+ 3 - 2
app/src/main/java/com/zhilin/patrol/http/HttpUrl.java

xqd xqd
@@ -9,7 +9,7 @@ public class HttpUrl {
 //    private static final String DOMAIN_URL = "http://www.360zqb.com/patrol/index.php/ApiMobi/";
 //    private static final String DOMAIN_URL = "http://39.106.14.189:8081/";
       private static final String DOMAIN_URL = "http://39.106.14.189:8081/index.php/ApiMobi/";
-//    private static final String DOMAIN_URL = "http://139.196.95.82/patrol/index.php/ApiMobi/";
+//    private static final String DOMAIN_URL = "http://139.196.95.82/patrol/index.php/ApiMobi/";/index.php/ApiMobi/getImgPng
     /** 登录请求 */
     public static final String LOGIN_URL = DOMAIN_URL + "login";
     /** 首页请求 */
@@ -43,5 +43,6 @@ public class HttpUrl {
     public static final String RECHECK_POST = DOMAIN_URL + "postRecheck";
     /** 整改图片 */
     public static final String RECTIFYIMG_POST = DOMAIN_URL + "rectifyImg";
-
+    /** 图形验证码 */
+    public static final String IMAGEPNG_GET = DOMAIN_URL+"getImgPng";
 }

+ 148 - 0
app/src/main/java/com/zhilin/patrol/tool/CodeUtils.java

xqd
@@ -0,0 +1,148 @@
+package com.zhilin.patrol.tool;
+
+import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import java.util.Random;
+
+/**
+ * Created by yao
+ * 用于图片验证码的工具类
+ */
+public class CodeUtils {
+    private static final char[] CHARS = {
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
+    };
+
+    private static CodeUtils mCodeUtils;
+    private int mPaddingLeft, mPaddingTop;
+    private StringBuilder mBuilder = new StringBuilder();
+    private Random mRandom = new Random();
+
+    //Default Settings
+    private static final int DEFAULT_CODE_LENGTH = 4;//验证码的长度  这里是4位
+    private static final int DEFAULT_FONT_SIZE = 60;//字体大小
+    private static final int DEFAULT_LINE_NUMBER = 5;//多少条干扰线
+    private static final int BASE_PADDING_LEFT = 20; //左边距
+    private static final int RANGE_PADDING_LEFT = 30;//左边距范围值
+    private static final int BASE_PADDING_TOP = 70;//上边距
+    private static final int RANGE_PADDING_TOP = 15;//上边距范围值
+    private static final int DEFAULT_WIDTH = 300;//默认宽度.图片的总宽
+    private static final int DEFAULT_HEIGHT = 100;//默认高度.图片的总高
+    private static final int DEFAULT_COLOR = 0xDF;//默认背景颜色值
+
+    private String code;
+
+    public static CodeUtils getInstance() {
+        if(mCodeUtils == null) {
+            mCodeUtils = new CodeUtils();
+        }
+        return mCodeUtils;
+    }
+
+    //生成验证码图片
+    public Bitmap createBitmap() {
+        mPaddingLeft = 0; //每次生成验证码图片时初始化
+        mPaddingTop = 0;
+
+        Bitmap bitmap = Bitmap.createBitmap(DEFAULT_WIDTH, DEFAULT_HEIGHT, Config.ARGB_8888);
+        Canvas canvas = new Canvas(bitmap);
+
+        code = createCode();
+
+        canvas.drawColor(Color.rgb(DEFAULT_COLOR, DEFAULT_COLOR, DEFAULT_COLOR));
+        Paint paint = new Paint();
+        paint.setTextSize(DEFAULT_FONT_SIZE);
+
+        for (int i = 0; i < code.length(); i++) {
+            randomTextStyle(paint);
+            randomPadding();
+            canvas.drawText(code.charAt(i) + "" , mPaddingLeft, mPaddingTop, paint);
+        }
+
+        //干扰线
+        for (int i = 0; i < DEFAULT_LINE_NUMBER; i++) {
+            drawLine(canvas, paint);
+        }
+
+        canvas.save(Canvas.ALL_SAVE_FLAG);//保存
+        canvas.restore();
+        return bitmap;
+    }
+    /**
+     * 得到图片中的验证码字符串
+     * @return
+     */
+    public String getCode() {
+        return code;
+    }
+
+    //生成验证码
+    public String createCode() {
+        mBuilder.delete(0, mBuilder.length()); //使用之前首先清空内容
+
+//        for (int i = 0; i < DEFAULT_CODE_LENGTH; i++) {
+//            mBuilder.append(CHARS[mRandom.nextInt(CHARS.length)]);
+//        }
+
+        String str = "5asd";
+        char[] strChar = str.toCharArray();
+        for (int i = 0; i < DEFAULT_CODE_LENGTH; i++) {
+            mBuilder.append(strChar[i]);
+        }
+        return mBuilder.toString();
+    }
+
+    //生成干扰线
+    private void drawLine(Canvas canvas, Paint paint) {
+        int color = randomColor();
+        int startX = mRandom.nextInt(DEFAULT_WIDTH);
+        int startY = mRandom.nextInt(DEFAULT_HEIGHT);
+        int stopX = mRandom.nextInt(DEFAULT_WIDTH);
+        int stopY = mRandom.nextInt(DEFAULT_HEIGHT);
+        paint.setStrokeWidth(1);
+        paint.setColor(color);
+        canvas.drawLine(startX, startY, stopX, stopY, paint);
+    }
+
+    //随机颜色
+    private int randomColor() {
+        mBuilder.delete(0, mBuilder.length()); //使用之前首先清空内容
+
+        String haxString;
+        for (int i = 0; i < 3; i++) {
+            haxString = Integer.toHexString(mRandom.nextInt(0xFF));
+            if (haxString.length() == 1) {
+                haxString = "0" + haxString;
+            }
+
+            mBuilder.append(haxString);
+        }
+
+        return Color.parseColor("#" + mBuilder.toString());
+    }
+
+    //随机文本样式
+    private void randomTextStyle(Paint paint) {
+        int color = randomColor();
+        paint.setColor(color);
+        paint.setFakeBoldText(mRandom.nextBoolean());  //true为粗体,false为非粗体
+        float skewX = mRandom.nextInt(11) / 10;
+        skewX = mRandom.nextBoolean() ? skewX : -skewX;
+        paint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜
+//        paint.setUnderlineText(true); //true为下划线,false为非下划线
+//        paint.setStrikeThruText(true); //true为删除线,false为非删除线
+    }
+
+    //随机间距
+    private void randomPadding() {
+        mPaddingLeft += BASE_PADDING_LEFT + mRandom.nextInt(RANGE_PADDING_LEFT);
+        mPaddingTop = BASE_PADDING_TOP + mRandom.nextInt(RANGE_PADDING_TOP);
+    }
+}

+ 2 - 1
app/src/main/java/com/zhilin/patrol/ui/activity/BaseActivity.java

xqd xqd
@@ -16,6 +16,7 @@ import android.widget.TextView;
 import com.zhilin.patrol.R;
 import com.zhilin.patrol.bean.LoginEntity;
 
+import java.io.IOException;
 import java.util.ArrayList;
 
 /**
@@ -152,7 +153,7 @@ public class BaseActivity extends AppCompatActivity {
     /**
      * 请求方法
      */
-    public void request() {
+    public void request(){
 
     }
 

+ 209 - 10
app/src/main/java/com/zhilin/patrol/ui/activity/LoginActivity.java

xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -1,22 +1,32 @@
 package com.zhilin.patrol.ui.activity;
 
 import android.Manifest;
+import android.annotation.SuppressLint;
 import android.annotation.TargetApi;
 import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
+import android.widget.ImageView;
 
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.load.model.GlideUrl;
 import com.zhilin.patrol.R;
 import com.zhilin.patrol.bean.HomeEntity;
 import com.zhilin.patrol.bean.LoginEntity;
 import com.zhilin.patrol.bean.LoginEntityNull;
 import com.zhilin.patrol.http.HttpUrl;
 import com.zhilin.patrol.tool.CheckPermissionUtils;
+import com.zhilin.patrol.tool.CodeUtils;
 import com.zhilin.patrol.tool.DialogUtil;
 import com.zhilin.patrol.tool.EncryptUtil;
 import com.zhilin.patrol.tool.IpUtils;
@@ -25,18 +35,28 @@ import com.zhilin.patrol.tool.SPUtil;
 import com.zhilin.patrol.tool.Utils;
 import com.zhilin.patrol.views.CustomProgressDialog;
 import com.zhy.http.okhttp.OkHttpUtils;
-import com.zhy.http.okhttp.builder.PostFormBuilder;
+import com.zhy.http.okhttp.callback.BitmapCallback;
 import com.zhy.http.okhttp.callback.Callback;
-import com.zhy.http.okhttp.request.RequestCall;
 
 import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.OnClick;
 import okhttp3.Call;
+import okhttp3.Cookie;
+import okhttp3.CookieJar;
+import okhttp3.Headers;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
 import okhttp3.Response;
 
+import static com.zhilin.patrol.http.HttpUrl.IMAGEPNG_GET;
+
 /**
  * 登录界面
  */
@@ -47,13 +67,21 @@ public class LoginActivity extends BaseActivity {
     EditText mAccountEt;//账号
     @BindView(R.id.et_pwd)
     EditText mPwdEt;//密码
-
+    @BindView(R.id.image)
+    ImageView imageVe;
     @BindView(R.id.btn_login)
     Button mLoginBtn;
+    @BindView(R.id.et_code)
+    EditText mCodeEt;//账号
+
     private CustomProgressDialog mProgressDialog;
     private LoginEntity.InfoListBean.UserInfoBean mUserInfo;
     private HomeEntity.InfoListBean homeInfo;
-
+    private CodeUtils codeUtils;
+    private String PHPSESSID;
+    public static final int GET_DATA_SUCCESS = 1;
+    public static final int NETWORK_ERROR = 2;
+    public static final int SERVER_ERROR = 3;
     String[] mPermissions = {
             Manifest.permission.ACCESS_COARSE_LOCATION,
             Manifest.permission.ACCESS_FINE_LOCATION,
@@ -64,9 +92,9 @@ public class LoginActivity extends BaseActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-//        request();
         isContainNavi(false);
         setContentView(R.layout.activity_login);
+
         LoginEntity.InfoListBean infoList = (LoginEntity.InfoListBean) SPUtil.getShareObject(LoginActivity.this, SPUtil.SP_COMMON_CONFIG, "infoList");
         if (infoList!=null){//登录过直接去主页
             toMain(infoList);
@@ -75,6 +103,7 @@ public class LoginActivity extends BaseActivity {
         ButterKnife.bind(this);
         mProgressDialog = new CustomProgressDialog(this);
         checkPermissions();
+        requestImg();
     }
 
     @TargetApi(Build.VERSION_CODES.M)
@@ -89,27 +118,194 @@ public class LoginActivity extends BaseActivity {
 
     }
 
-    @OnClick(R.id.btn_login)
+    @OnClick({R.id.btn_login,R.id.image})
     public void onClick(View view) {
         if (view.getId() == R.id.btn_login) {//登录
             String accountText = mAccountEt.getText().toString().trim();
             String pwdText = mPwdEt.getText().toString().trim();
+            String codeText = mCodeEt.getText().toString().trim();
             if (isEmpt(accountText, "请输入账号")) return;
             if (isEmpt(pwdText, "请输入密码")) return;
+            if (isEmpt(codeText, "请输入验证码")) return;
             String ipAddress = IpUtils.getIpAddress(this);
             Log.i(TAG,"ipAddress地址");
             Log.i(TAG,ipAddress);
+
             try {
                 String pwdByMd5 = EncryptUtil.encodeByMd5(pwdText);
                 Log.i("PASSWORD",pwdByMd5);
-                postLogin(accountText, ipAddress, pwdByMd5);
-                request();
+                postLogin(accountText, ipAddress, pwdByMd5,codeText);
+
             } catch (Exception e) {
                 Utils.showToast(this, "md5加密失败");
             }
         }
+        if(view.getId()==R.id.image){
+            requestImg();
+        }
+    }
+    /**
+     * 特殊的自动管理Cookies
+     */
+   /* private class CookiesManager implements CookieJar {
+
+        //保存每个url的cookie
+        private HashMap<okhttp3.HttpUrl, List<Cookie>> cookieStore = new HashMap<okhttp3.HttpUrl, List<Cookie>>();
+
+        //上一个请求url
+        private okhttp3.HttpUrl url;
+
+        @Override
+        public void saveFromResponse(okhttp3.HttpUrl httpUrl, List<Cookie> list) {
+            //保存链接的cookie
+            cookieStore.put(httpUrl, list);
+            //保存上一次的url,供给下一次cookie的提取。
+            url = httpUrl;
+        }
+
+        @Override
+        public List<Cookie> loadForRequest(okhttp3.HttpUrl httpUrl) {
+
+            //加载上一个链接的cookie
+            List<Cookie> cookies = cookieStore.get(url);
+            return cookies != null ? cookies : new ArrayList<Cookie>();
+
+        }
+
+    }*/
+
+    /*
+    * 获取图形验证码
+    * */
+    public void requestImg() {
+//        URL url = new URL("http://39.106.14.189:8081/index.php/ApiMobi/getImgPng");
+//        returnBitMap("http://39.106.14.189:8081/index.php/ApiMobi/getImgPng");
+//        image.setImageURI(url);
+        setImageURL(IMAGEPNG_GET);
+        //初始化okhttp,
     }
 
+    @SuppressLint("HandlerLeak")
+    private Handler handler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case GET_DATA_SUCCESS:
+                    Bitmap bitmap = (Bitmap) msg.obj;
+                    imageVe.setImageBitmap(bitmap);
+                    break;
+                case NETWORK_ERROR:
+                    Utils.showToast(LoginActivity.this, "网络连接失败");
+                    break;
+                case SERVER_ERROR:
+                    Utils.showToast(LoginActivity.this, "服务器发生错误");
+                    break;
+            }
+        }
+    };
+    //设置网络图片
+    public void setImageURL(final String path) {
+        //开启一个线程用于联网
+        new Thread() {
+            @Override
+            public void run() {
+                try {
+                    //把传过来的路径转成URL
+//                    URL url = new URL(path);
+                    //获取连接
+
+//               OkHttpUtils.post().url(path).build().execute(new BitmapCallback() {
+//                        @Override
+//                        public void onResponse(Bitmap bitmap, int i) {
+//                            try {
+//                                imageVe.setImageBitmap(bitmap);
+//
+//                            } catch (Exception e) {
+//                            }
+//                        }
+//
+//                        @Override
+//                        public void onError(Call arg0, Exception arg1, int arg2) {
+//                            // TODO Auto-generated method stub
+//                        }
+//                    });
+                /*Response response = null;
+                try {
+                    response = OkHttpUtils.post()
+                            .url(path)
+                            .build().execute();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                Headers responseHeaders = response.headers();
+                int responseHeadersLength = responseHeaders.size();
+                for (int i = 0; i < responseHeadersLength; i++){
+                    String headerName = responseHeaders.name(i);
+                    String headerValue = responseHeaders.get(headerName);
+                    if(headerName.equals("Set-Cookie")){
+                        PHPSESSID=headerValue;
+                    }
+
+                    System.out.print("TAG----------->Name:"+headerName+"------------>Value:"+headerValue+"\n");
+                }*/
+                Response response = OkHttpUtils.post()
+                            .url(path)
+                            .build().execute();
+                if (response.isSuccessful()) {
+                    byte[] jsonStr = response.body().bytes();
+//                    Log.i("验证码图片=",jsonStr);
+//                    InputStream inputStream = response.body().byteStream();
+                    Bitmap img =  BitmapFactory.decodeByteArray(jsonStr,0,jsonStr.length);
+//                    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
+                    Message msg = Message.obtain();
+                    msg.obj = img;
+                    msg.what = GET_DATA_SUCCESS;
+                    handler.sendMessage(msg);
+//                    inputStream.close();
+                    Headers responseHeaders = response.headers();
+                    int responseHeadersLength = responseHeaders.size();
+                    for (int i = 0; i < responseHeadersLength; i++){
+                        String headerName = responseHeaders.name(i);
+                        String headerValue = responseHeaders.get(headerName);
+                        if(headerName.equals("Set-Cookie")){
+                            PHPSESSID=headerValue;
+                        }
+                        System.out.print("TAG----------->Name:"+headerName+"------------>Value:"+headerValue+"\n");
+                    }
+                    }else {
+                         Utils.showToast(LoginActivity.this, "获取验证码失败");
+                    }
+/*
+                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+                    //使用GET方法访问网络
+                    connection.setRequestMethod("GET");
+                    //超时时间为10秒
+                    connection.setConnectTimeout(10000);
+                    //获取返回码
+                    int code = connection.getResponseCode();
+                    if (code == 200) {
+                        InputStream inputStream = connection.getInputStream();
+                        //使用工厂把网络的输入流生产Bitmap
+
+                        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
+                        //利用Message把图片发给Handler
+                        Message msg = Message.obtain();
+                        msg.obj = bitmap;
+                        msg.what = GET_DATA_SUCCESS;
+                        handler.sendMessage(msg);
+                        inputStream.close();
+                    } else {
+                        //服务启发生错误
+                        handler.sendEmptyMessage(SERVER_ERROR);
+                    }*/
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    //网络连接错误
+                    handler.sendEmptyMessage(NETWORK_ERROR);
+                }
+            }
+        }.start();
+    }
     /**
      * 提交登录
      *
@@ -118,13 +314,15 @@ public class LoginActivity extends BaseActivity {
      * @param pwdByMd5
      * @throws IOException
      */
-    private void postLogin(String accountText, String ipAddress, String pwdByMd5) throws IOException {
+    private void postLogin(String accountText, String ipAddress, String pwdByMd5,String codeText) throws IOException {
         mProgressDialog.showDialog("正在登录...");
         OkHttpUtils.post()
                 .url(HttpUrl.LOGIN_URL)
+                .addHeader("Cookie", PHPSESSID)
                 .addParams("loginName", accountText)
                 .addParams("loginPwd", pwdByMd5)
                 .addParams("userIP", ipAddress)
+                .addParams("tokenCode",codeText)
                 .build().execute(new Callback<LoginEntity>() {
             @Override
             public LoginEntity parseNetworkResponse(Response response, int id) throws Exception {
@@ -192,7 +390,9 @@ public class LoginActivity extends BaseActivity {
 //                }
                 SPUtil.savaToShared(LoginActivity.this, SPUtil.SP_COMMON_CONFIG, "infoList", infoList);
 //                toMain(infoBean);
+
                 toMain(infoList);
+
             }
         });
 
@@ -213,7 +413,6 @@ public class LoginActivity extends BaseActivity {
         }
 
         if(mUserInfo.getUserRole()==3) {
-            request();
             Intent intent = new Intent(LoginActivity.this, RectifyMainActivity.class);
 //            intent.putExtra("userInfo", mUserInfo);
             intent.putExtra("infoList", infoList);

+ 0 - 2
app/src/main/java/com/zhilin/patrol/ui/activity/RecifyUploadActivity.java

xqd
@@ -150,10 +150,8 @@ public class RecifyUploadActivity extends BaseActivity implements View.OnClickLi
         }else {
             setTitle("复议申请");
         }
-
         setRightTv("提交");
         setRightClick(this);
-
         Log.i("question==",mquestion);
         mQuestionTv.setText(mquestion);
 

+ 48 - 0
app/src/main/res/layout/activity_login.xml

xqd
@@ -76,6 +76,54 @@
             android:textSize="@dimen/size_normal"/>
     </LinearLayout>
 <!--    android:background="@drawable/selector_btn_blue"-->
+
+    <LinearLayout
+        android:id="@+id/ll_layout_code"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_marginLeft="40dp"
+        android:layout_marginRight="40dp"
+        android:layout_marginTop="30dp"
+        android:gravity="center_vertical"
+        android:orientation="horizontal"
+        android:visibility="visible"
+        >
+
+        <EditText
+            android:id="@+id/et_code"
+
+            android:layout_height="50dp"
+            android:background="#F2F2F2"
+            android:gravity="center_vertical|left"
+            android:layout_weight="1"
+            android:hint="     输入验证码"
+            android:inputType="textPassword"
+            android:textSize="@dimen/size_normal"
+            android:layout_width="0dp" />
+
+        <ImageView
+            android:id="@+id/image"
+            android:layout_width="0dp"
+            android:layout_height="50dp"
+            android:layout_weight="1"
+            android:layout_marginLeft="20dp"
+            />
+    </LinearLayout>
+
+
+
+    <!--<Button
+        android:id="@+id/btn"
+        android:layout_width="180dp"
+        android:layout_height="50dp"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="30dp"
+        android:background="#4976a7"
+        android:gravity="center"
+        android:textSize="@dimen/size_big"
+        android:textColor="#fff"
+        android:text="获得验证码"/>-->
+
     <Button
         android:id="@+id/btn_login"
         style="?android:attr/borderlessButtonStyle"