Android 封装的工具类

三种Toast(Toasty、tastytoast、supertoasts)

		if(id == R.id.toast){
            /**
             * 常规Toast
             */
            Tools.showToast(context,"点击次数:"+(toastInt++)+" 次");
        }else if(id == R.id.Toasty){
            /**
             * implementation 'com.github.GrenderG:Toasty:1.5.2'
             */
            //https://gitcode.com/GrenderG/Toasty/overview?utm_source=csdn_github_accelerator&isLogin=1
            Toasty.success(context, "点击次数:"+(toastInt++)+" 次", Toast.LENGTH_SHORT, true).show();
        }else if(id == R.id.TastyToast){
            /**
             * implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1'
             */
            //https://github.com/yadav-rahul/TastyToast
            TastyToast.makeText(context,"点击次数:"+(toastInt++)+" 次",TastyToast.LENGTH_LONG,TastyToast.SUCCESS);
        }else if (id == R.id.SuperActivityToast){
            /**
             * implementation 'com.github.johnpersano:supertoasts:2.0'
             */
            //https://github.com/JohnPersano/SuperToasts
            SuperActivityToast.create(context, new Style(), Style.TYPE_BUTTON)
                    .setButtonText("UNDO")
                    .setButtonIconResource(R.mipmap.ic_launcher)
                    .setOnButtonClickListener("good_tag_name", null, new SuperActivityToast.OnButtonClickListener() {
                        @Override
                        public void onClick(View view, Parcelable token) {
                            Log.e("mylog","点击了 Toast");
                        }
                    })
                    .setProgressBarColor(Color.WHITE)
                    .setText("Email deleted")
                    .setDuration(Style.DURATION_LONG)
                    .setFrame(Style.FRAME_LOLLIPOP)
                    .setColor(PaletteUtils.getSolidColor(PaletteUtils.MATERIAL_PURPLE))
                    .setAnimations(Style.ANIMATIONS_POP).show();
        }

日志封装类-MyLog

是对android log的封装,封装后 可以设置显示级别

/**
 * Log的封装类,方便开启和关闭log
 */
public class MyLog {
    public static final int VERBOSE = 1;
    public static final int DEBUG = 2;
    public static final int INFO = 3;
    public static final int WARN = 4;
    public static final int ERROR = 5;
    public static final int NOTHING = 6;
    public static final int level = VERBOSE; //设置显示级别
    public static final String MYLOG_PATH_SDCARD_DIR = "/sdcard/ScanZbar/log";// 日志文件在sdcard中的路径
    public static final String MY_LOG_FILE_NAME = "Log.txt";// 本类输出的日志文件名称


    public static void v(String tag, String msg){
        if(level <= VERBOSE)
            Log.v(tag,msg);
    }

    public static void d(String tag, String msg){
        if(level <= DEBUG)
            Log.d(tag,msg);
    }

    public static void i(String tag, String msg){
        if(level <= INFO)
            Log.i(tag,msg);
    }

    public static void w(String tag, String msg){
        if(level <= WARN)
            Log.w(tag,msg);
    }

    public static void e(String tag, String msg){
        if(level <= ERROR)
            Log.e(tag,msg);
    }

	//调用该方法,可以将日志写入日志文件
	public static void Loge(String tag, String msg){
        if(LEVEL <= ERROR) {
            Log.e(tag, msg);
            writeLogtoFile("ERROR",tag,msg);
        }
    }

/**
     * 打开日志文件并写入日志
     * @param mylogtype
     * @param tag
     * @param text
     */
    private static void writeLogtoFile(String mylogtype, String tag, String text) {// 新建或打开日志文件
        Date nowtime = new Date();
        String needWriteFiel = new SimpleDateFormat(TimeUtil.SDF3).format(nowtime);
        String needWriteMessage = new SimpleDateFormat(TimeUtil.SDF1).format(nowtime) + " " + mylogtype + " " + tag + " " + text;
        File dirPath = Environment.getExternalStorageDirectory();

        File dirsFile = new File(MYLOG_PATH_SDCARD_DIR);
        if (!dirsFile.exists()){
            dirsFile.mkdirs();
        }
        //创建日志文件
        File file = new File(dirsFile.toString(), needWriteFiel +".txt");// MYLOG_PATH_SDCARD_DIR
        if (!file.exists()) {
            try {
                //在指定的文件夹中创建文件
                boolean creatB = file.createNewFile();
                if(!creatB)
                    MyLog.e("mylog","创建日志文件失败!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        try(FileWriter filerWriter = new FileWriter(file, true);// 后面这个参数代表是不是要接上文件中原来的数据,不进行覆盖
            BufferedWriter bufWriter = new BufferedWriter(filerWriter)) {
            bufWriter.write(needWriteMessage);
            bufWriter.newLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

使用
使用和正常log使用一样

MyLog.e("mylog","123");
MyLog.i("mylog","222");
...

线程封装类-LocalThreadPools

针对AsyncTask被弃用的替代

/**
 * @Description TODO(全局使用的线程池)
 */
public class LocalThreadPools {
    private static int threadNum = 0;
    private static String TAG = LocalThreadPools.class.getSimpleName();

    private static ExecutorService THREAD_POOL_EXECUTOR;

    /**
     * CPU数量
     */
    private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
    /**
     * 线程池数量
     */
    private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT-1,4));
    /**
     * 最大线程数量 = CPU数量*2+1
     */
    private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2+1;
    /**
     * 等待线程存活时间
     */
    private static final int KEEP_ALIVE_SECONDS = 60;
    /**
     * 等待线程存活时间的单位
     */
    private static final TimeUnit unit = TimeUnit.MINUTES;
    private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<>(8);
    /**
     * 线程工厂
     */
    private static final ThreadFactory sThreadFactory = new ThreadFactory() {
        private final AtomicInteger mCount = new AtomicInteger(1);

        public Thread newThread(Runnable r) {
            threadNum++;
            MyLog.e("mylog","线程工厂创建一个线程:"+threadNum+","+mCount.getAndIncrement());
            return new Thread(r, "MangoTask #" + mCount.getAndIncrement());
        }
    };

    private void initThreadPool() {
        MyLog.e("mylog","core_pool_size:"+CORE_POOL_SIZE+",maximum_pool_size:"+MAXIMUM_POOL_SIZE+"," +
                "KEEP_ALIVE_SECONDS:"+KEEP_ALIVE_SECONDS+",");
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_SECONDS, unit,
                sPoolWorkQueue, sThreadFactory,new RejectedHandler()){
            @Override
            public void execute(Runnable command) {
                super.execute(command);
                MyLog.e("mylog","-----------ActiveCount="+getActiveCount());
                MyLog.e("mylog","-----------PoolSize="+getPoolSize());
                MyLog.e("mylog","-----------Queue="+getQueue().size());
                MyLog.e("mylog","-----------finish="+getCompletedTaskCount());
            }
        };
        //允许核心线程空闲超时时被回收
        threadPoolExecutor.allowCoreThreadTimeOut(true);
        THREAD_POOL_EXECUTOR = threadPoolExecutor;
    }

    private class RejectedHandler implements RejectedExecutionHandler {

        @Override
        public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
            //可在这里做一些提示用户的操作
            Tools.showToast(mContext.get(),"当前执行的任务过多,请稍后再试");
        }
    }

    private WeakReference<Context> mContext;
    private static LocalThreadPools instance;
    private LocalThreadPools(Context context){
        mContext = new WeakReference<>(context);
        initThreadPool();
    }
    public static LocalThreadPools getInstance(Context context){
        if (instance == null) {
            instance = new LocalThreadPools(context);
        }
        return instance;
    }

    public void execute(Runnable command){
        THREAD_POOL_EXECUTOR.execute(command);
    }


    /**
     * 通过interrupt方法尝试停止正在执行的任务,但是不保证真的终止正在执行的任务
     * 停止队列中处于等待的任务的执行
     * 不再接收新的任务
     * @return 等待执行的任务列表
     */
    public static List<Runnable> shutdownNow(){
        return THREAD_POOL_EXECUTOR.shutdownNow();
    }

    /**
     * 停止队列中处于等待的任务
     * 不再接收新的任务
     * 已经执行的任务会继续执行
     * 如果任务已经执行完了没有必要再调用这个方法
     */
    public void shutDown(){
        THREAD_POOL_EXECUTOR.shutdown();
        sPoolWorkQueue.clear();
    }

}

使用

LocalThreadPools.getInstance((TestActivity) mView).execute(new Runnable() {
	@Override
    public void run() {
    	//异步操作
    }            
});

自定义等待框-WaitDialog

布局文件
1、布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog_loading_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >

    <LinearLayout
        android:layout_width="150dp"
        android:layout_height="110dp"
        android:background="@mipmap/loading_bg"
        android:gravity="center"

        android:orientation="vertical"
        android:paddingBottom="10dp"
        android:paddingLeft="21dp"
        android:paddingRight="21dp"
        android:paddingTop="10dp">

        <ProgressBar
            android:id="@+id/progressBar1"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_gravity="center_horizontal"
            android:indeterminateBehavior="repeat"
            android:indeterminateDrawable="@drawable/dialog_loading"
            android:indeterminateOnly="true" />

        <TextView
            android:id="@+id/tipTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:text="加载中..."
            android:textColor="#f0f0f0"
            android:textSize="15sp" />
    </LinearLayout>

</LinearLayout>

2、Drawable

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@mipmap/dialog_loading_img"
    android:pivotX="50%"
    android:pivotY="50%" />


    <!-- 下面是转圈的
    <?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@drawable/dialog_loading_img2"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />
    -->

3、资源
背景图片资源 提取码:swey

自定义类

package com.kaiya.mvp.npm_ar.utils;

import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import com.kaiya.mvp.npm_ar.R;


public class WaitDialog extends Dialog {
    public WaitDialog(Context context){
        super(context);
    }

    public WaitDialog(Context context, int themeResId){
        super(context,themeResId);
    }

    public static class Builder{

        private Context context;
        private String message;
        private boolean isShowMessage=true;
        private boolean isCancelable=false;
        private boolean isCancelOutside=false;


        public Builder(Context context) {
            this.context = context;
        }

        /**
         * 设置提示信息
         * @param message
         * @return
         */

        public Builder setMessage(String message){
            this.message=message;
            return this;
        }

        /**
         * 设置是否显示提示信息
         * @param isShowMessage
         * @return
         */
        public Builder setShowMessage(boolean isShowMessage){
            this.isShowMessage=isShowMessage;
            return this;
        }

        /**
         * 设置是否可以按返回键取消
         * @param isCancelable
         * @return
         */

        public Builder setCancelable(boolean isCancelable){
            this.isCancelable=isCancelable;
            return this;
        }

        /**
         * 设置是否可以取消
         * @param isCancelOutside
         * @return
         */
        public Builder setCancelOutside(boolean isCancelOutside){
            this.isCancelOutside=isCancelOutside;
            return this;
        }

        public WaitDialog create(){
            LayoutInflater inflater = LayoutInflater.from(context);
            View view=inflater.inflate(R.layout.dialog,null);
            WaitDialog waitDialog=new WaitDialog(context, R.style.MyDialogStyle);
            TextView msgText= view.findViewById(R.id.tipTextView);
            if(isShowMessage){
                msgText.setText(message);
            }else{
                msgText.setVisibility(View.GONE);
            }
            waitDialog.setContentView(view);
            waitDialog.setCancelable(isCancelable);
            waitDialog.setCanceledOnTouchOutside(isCancelOutside);
            return  waitDialog;
        }
    }
}

样式

<!-- 等待框样式 -->
    <style name="MyDialogStyle">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

调用

	public static void showWaitDialog(Context context, String str){
        WaitDialog.Builder builder = new WaitDialog.Builder(context)
                .setMessage(str)
                .setCancelable(false);
        waitDialog = builder.create();
        waitDialog.show();
    }

    public static void hideWaitDialog(){
        if(waitDialog != null) {
            waitDialog.dismiss();
        }
    }

自定义进度条-LoadProgressbar

自定义进度条

/**
 * 进度条
 */
public class DownLoadProgressbar extends View {
    private Paint paint = new Paint(); // 绘制背景灰色线条画笔
    private Paint paintText = new Paint(); // 绘制下载进度画笔
    private float offset = 0f; // 下载偏移量
    private float maxvalue = 0f; // 进度的总大小
    private float currentValue = 0f; // 当前进度
    private Rect mBound = new Rect(); // 获取百分比数字的长宽
    private String percentValue = "0%"; // 要显示的现在百分比
    private float offsetRight = 0f; // 灰色线条距离右边的距离
    private int textSize = SizeUtils.sp2px(25); // 百分比的文字大小
    private float offsetTop = SizeUtils.dp2px(18); // 距离顶部的偏移量


    public DownLoadProgressbar(Context context) {
        this(context, null);
    }

    public DownLoadProgressbar(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public DownLoadProgressbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        getTextWidth();
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 绘制底色
        paint.setColor(Color.parseColor("#eeeeee"));
        paint.setStrokeWidth(SizeUtils.dp2px(10));
        canvas.drawLine(0, offsetTop, getWidth() - offsetRight, offsetTop, paint);
        // 绘制进度条颜色
        paint.setColor(Color.parseColor("#ff0000"));
        paint.setStrokeWidth(SizeUtils.dp2px(11));
        canvas.drawLine(0, offsetTop, offset, offsetTop, paint);
        paint.setColor(Color.parseColor("#ffffff"));
        paint.setStrokeWidth(SizeUtils.dp2px(1));
        paintText.setColor(Color.parseColor("#ffffff"));
        paintText.setTextSize(textSize);
        paintText.setAntiAlias(true);
        paintText.getTextBounds(percentValue, 0, percentValue.length(), mBound);
        canvas.drawLine(offset, offsetTop, offset + mBound.width() + SizeUtils.dp2px(4), offsetTop, paint);
        canvas.drawText(percentValue, offset, offsetTop + mBound.height() / 2 - SizeUtils.dp2px(2), paintText);
    }

    public void setCurrentValue(float currentValue) {
        this.currentValue = currentValue;
        int value = (int) (currentValue * 100 / maxvalue);
        if (value < 100 && value > 0) {
            percentValue = value + "%";
        } else if (value <= 0) {
            percentValue = "0%";
        } else {
            percentValue = "100%";
        }
        calc();
        invalidate();
    }


    private void calc() {
        if (currentValue < maxvalue) {
            offset = (getWidth() - offsetRight) * currentValue / maxvalue;
        } else {
            offset = getWidth() - offsetRight;
        }
    }

    /**
     * 设置最大值
     *
     * @param maxValue
     */
    public void setMaxvalue(int maxValue) {
        this.maxvalue = maxValue;
    }

    /**
     * 获取“100%”的宽度
     */
    public void getTextWidth() {
        Paint paint = new Paint();
        Rect rect = new Rect();
        paint.setTextSize(textSize);
        paint.setAntiAlias(true);
        paint.getTextBounds("100%", 0, "100%".length(), rect);
        offsetRight = rect.width() + SizeUtils.dp2px(5);;
    }
}

解压缩类-ZipUtils

解压缩

/**
 * 解压缩zip文件
 */
public class ZipUtils {

    public ZipUtils() {
    }

    /**
     * 根据byte数组,生成文件
     */
    public static void getFile(byte[] bfile, String filePath, String fileName) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        try {
            File dir = new File(filePath);
            if (!dir.exists()) {//判断文件目录是否存在
                dir.mkdirs();
            }
            file = new File(filePath + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bfile);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }

    //  使用密码解压(图片不加密)
    public static boolean unZipFile1(String zipFileFullName, String filePath, String password) {
        try {
            ZipFile zipFile = new ZipFile(zipFileFullName);
            // 如果解压需要密码
            if (zipFile.isEncrypted()) {
                zipFile.setPassword(password);
            }
            File file = new File(filePath);
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            zipFile.extractAll(filePath);//提取所有文件
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    //  使用密码解压
    public static boolean unZipFile(String zipFileFullName, String filePath, String password) {
        try {
            ZipFile zipFile = new ZipFile(zipFileFullName);
            // 如果解压需要密码
            if (zipFile.isEncrypted()) {
                zipFile.setPassword(password);
            }
            File file = new File(filePath);
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            zipFile.extractAll(filePath);//提取所有文件
//            压缩
            ZipFolder(filePath, filePath + "01");
//            解压
            ZipUtils.UnZipFolder(filePath + "01", filePath);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 解压zip到指定的路径
     *
     * @param zipFileString ZIP的名称
     * @param outPathString 要解压缩路径
     * @throws Exception
     */
    public static void UnZipFolder(String zipFileString, String outPathString)  {
        ZipInputStream inZip = null;
        OutputStream out = null;
        try{
            inZip = new ZipInputStream(new FileInputStream(zipFileString));
            ZipEntry zipEntry;
            String szName = "";
            List<File> fileList = new ArrayList<File>();
            while ((zipEntry = inZip.getNextEntry()) != null) {
                szName = zipEntry.getName();
                if (zipEntry.isDirectory()) {
                    //获取部件的文件夹名
                    szName = szName.substring(0, szName.length() - 1);
                    File folder = new File(outPathString + File.separator + szName);
                    folder.mkdirs();
                } else {
                    File file = new File(outPathString + File.separator + szName);
                    if (!file.exists()) {
                        fileList.add(file);
                        file.getParentFile().mkdirs();
                        file.createNewFile();
                    }
                    // 获取文件的输出流
//                FileOutputStream out = new FileOutputStream(file);
                    out = AesUtil.encrypt(file, AesUtil.toKey(MyApplication.getInstance().getAESKey().getBytes()));// 加密
                    int len;
                    byte[] buffer = new byte[1024];
                    // 读取(字节)字节到缓冲区
                    while ((len = inZip.read(buffer)) != -1) {
                        // 从缓冲区(0)位置写入(字节)字节
                        out.write(buffer, 0, len);
                        out.flush();
                    }
                    out.close();
                }
            }
            inZip.close();
//        删除目录下多余文件夹
            File dirFile = new File(outPathString);
            File[] files = dirFile.listFiles();
            for (int i = 0; i < files.length; i++) {
                if (files[i].isDirectory()) {
                    deleteDirectory(files[i].getAbsolutePath());
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(inZip != null){
                safeClose(inZip);
            }
            if(out != null){
                safeClose(out);
            }
        }
    }
    public static void safeClose(OutputStream fis){
        if(fis != null){
            try{
                fis.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    public static void safeClose(ZipInputStream fis){
        if(fis != null){
            try{
                fis.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

    /**
     * 压缩文件和文件夹
     *
     * @param srcFileString 要压缩的文件或文件夹
     * @param zipFileString 解压完成的Zip路径
     * @throws Exception
     */
    public static void ZipFolder(String srcFileString, String zipFileString) {
        FileOutputStream fis = null;
        ZipOutputStream outZip = null;
        try{
            fis = new FileOutputStream(zipFileString);
            //创建ZIP
            outZip = new ZipOutputStream(fis);
            //创建文件
            File file = new File(srcFileString);
            //压缩
            ZipFiles(file.getParent() + File.separator, file.getName(), outZip);
            //完成和关闭
            outZip.finish();
            outZip.close();
            fis.close();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(fis != null){
                safeClose(fis);
            }
            if(outZip != null){
                safeClose1(outZip);
            }
        }
    }

    public static void safeClose(FileOutputStream fis){
        if(fis != null){
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void safeClose1(ZipOutputStream fis){
        if(fis != null){
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 压缩文件
     *
     * @param folderString
     * @param fileString
     * @param zipOutputSteam
     * @throws Exception
     */
    private static void ZipFiles(String folderString, String fileString, ZipOutputStream zipOutputSteam) {
        FileInputStream inputStream = null;
        try{
            if (zipOutputSteam == null)
                return;
            File file = new File(folderString + fileString);
            if (file.isFile()) {
                ZipEntry zipEntry = new ZipEntry(fileString);
                inputStream = new FileInputStream(file);
                zipOutputSteam.putNextEntry(zipEntry);
                int len;
                byte[] buffer = new byte[4096];
                while ((len = inputStream.read(buffer)) != -1) {
                    zipOutputSteam.write(buffer, 0, len);
                }
                zipOutputSteam.closeEntry();
            } else {
                //文件夹
                String fileList[] = file.list();
                //没有子文件和压缩
                if (fileList.length <= 0) {
                    ZipEntry zipEntry = new ZipEntry(fileString + File.separator);
                    zipOutputSteam.putNextEntry(zipEntry);
                    zipOutputSteam.closeEntry();
                }
                //子文件和递归
                for (int i = 0; i < fileList.length; i++) {
                    ZipFiles(folderString + fileString + "/", fileList[i], zipOutputSteam);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(inputStream != null){
                safeClose(inputStream);
            }
        }
    }

    public static Bitmap getBitmap(File photoFile) {
        InputStream fis = null;
        try {
            fis = AesUtil.decrypt(photoFile, AesUtil.toKey(MyApplication.getInstance().getAESKey().getBytes()));
            return BitmapFactory.decodeStream(fis);  ///把流转化为Bitmap图片
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            MyLog.e("mylog", "e1:" + e.getMessage());
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            MyLog.e("mylog", "e2:" + e.getMessage());
            return null;
        } finally {
            if(fis != null){
                safeClose(fis);
            }
        }
    }

    public static void safeClose(InputStream fis){
        if(fis != null){
            try{
                fis.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

    public static File getPhotoFile(String nonet, String fileAbsolutePath) {
        File file = new File(fileAbsolutePath);
        File[] subFile = file.listFiles();
        if (subFile != null) {
            for (int i = 0; i < subFile.length; i++) {
                // 判断是否为文件夹
                /*if (subFile[i].isDirectory()) {
                    getPhotoFile(idNonet, subFile[i].getAbsolutePath());
                } else {*/
                String filename = subFile[i].getName();
                if (!TextUtils.isEmpty(filename) && filename.length() >= 13 && nonet != null) {
                    String subFilename = filename.substring(filename.length() - 13, filename.length() - 4);
//                MyLog.e("mylog", "subFilename:" + subFilename + "  nonet:" + nonet);
                    if (subFilename.equals(nonet)) {
                        MyLog.e("mylog", "filename:" + filename);
                        return subFile[i];
                    }
                }
            }
        }
        return null;
    }

    /**
     * @param zipName  压缩文件的路径
     * @param filePath 被压缩文件的路径
     * @param password 加密
     * @description:压缩以及加密
     * @author: renbo
     * @date: 2021年5月19日 下午3:35:33
     */
    public static void unZipPass(String zipName, String filePath, String password) throws ZipException {
        ZipFile zipFile = new ZipFile(zipName);
        ArrayList<File> filesToAdd = new ArrayList<File>();
        File root = new File(filePath);
        File[] files = root.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                filesToAdd.add(new File(file.getAbsolutePath()));
            } else {
                filesToAdd.add(new File(file.getAbsolutePath()));
            }
        }
        ZipParameters parameters = new ZipParameters();
        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // set
        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
        parameters.setEncryptFiles(true);
        parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
        parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
        // Set password
        parameters.setPassword(password);
        zipFile.addFiles(filesToAdd, parameters);
    }

    /**
     * 删除单个文件
     *
     * @param filePath 被删除文件的文件名
     * @return 文件删除成功返回true,否则返回false
     */
    public static boolean deleteFile(String filePath) {
        File file = new File(filePath);
        if (file.isFile() && file.exists()) {
            return file.delete();
        }
        return false;
    }

    /**
     * 删除文件夹以及目录下的文件
     *
     * @param filePath 被删除目录的文件路径
     * @return 目录删除成功返回true,否则返回false
     */
    public static boolean deleteDirectory(String filePath) {
        boolean flag = false;
        //如果filePath不以文件分隔符结尾,自动添加文件分隔符
        if (!filePath.endsWith(File.separator)) {
            filePath = filePath + File.separator;
        }
        File dirFile = new File(filePath);
        if (!dirFile.exists() || !dirFile.isDirectory()) {
            return false;
        }
        flag = true;
        File[] files = dirFile.listFiles();
        //遍历删除文件夹下的所有文件(包括子目录)
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()) {
                //删除子文件
                flag = deleteFile(files[i].getAbsolutePath());
                if (!flag) break;
            } else {
                //删除子目录
                flag = deleteDirectory(files[i].getAbsolutePath());
                if (!flag) break;
            }
        }
        if (!flag) return false;
        //删除当前空目录
        return dirFile.delete();
    }

    /**
     * 根据路径删除指定的目录或文件,无论存在与否
     *
     * @param filePath 要删除的目录或文件
     * @return 删除成功返回 true,否则返回 false。
     */
    public static boolean DeleteFolder(String filePath) {
        File file = new File(filePath);
        if (!file.exists()) {
            return false;
        } else {
            if (file.isFile()) {
                // 为文件时调用删除文件方法
                return deleteFile(filePath);
            } else {
                // 为目录时调用删除目录方法
                return deleteDirectory(filePath);
            }
        }
    }

}

本地数据库类-MySQLiteHelper

Android 创建本地数据库

/**
 * 数据库帮助类
 */
public class MySQLiteHelper extends SQLiteOpenHelper {
    private static String initSqlFile = Environment.getExternalStorageDirectory().getAbsolutePath();
    private static String REALPATH = initSqlFile+ File.separator+"XXXX"; //需要创建的路径
    private static String REALFILE = REALPATH + File.separator +"xxxx.db"; //需要创建的文件
    private static MySQLiteHelper db;
    private static final int DATEBASE_VERSION = 1;  //定义版本号
    public static String getRealPath(){
        return REALPATH;
    }
    public static String getRealFile(){
        return REALFILE;
    }
    public static void CloseDB(){
        db.close();
    }

    //自定义构造方法,简化自动生成的构造方法,path 是主要指定创建db文件的路径
    public MySQLiteHelper(Context context){
        this(context,REALFILE,null,DATEBASE_VERSION);
        MyLog.e("mylog","文件路径:"+REALFILE);
    }

    //实现接口必须实现的构造方法
    public MySQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //第一次创建数据库时,才会调用
        MyLog.e("mylog","创建数据库");
        sqLiteDatabase.execSQL(TableA.CREAT_TABLE(TableA.TABLE_NAME())); //创建表
        sqLiteDatabase.execSQL(TableB.CREAT_TABLE(TableB.TABLE_NAME())); //创建表
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }
}

TableA对于的类

/**
 * 对应数据表的类
 */
public class TableA {
    public static  String TABLE_NAME(){
        return "table_a";
    }
    public static final String id = "id"; //ID
    public static final String s1= "s1";//字段s1
    public static final String s1= "s2";//字段s2
    public static final String s1= "s3";//字段s3
    public static final String s1= "s4";//字段s4
    public static final String s1= "s5";//字段s5
    public static final String s1= "s6";//字段s6

    public static String CREAT_TABLE(String tableName){
        return new StringBuffer().
                append("CREATE TABLE IF NOT EXISTS ").append(tableName).
                append("(").
                append(id).append(" INTEGER PRIMARY KEY AUTOINCREMENT,").
                append(s1).append(" TEXT,").
                append(s2).append(" TEXT,").
                append(s3).append(" TEXT,").
         		append(s4).append(" TEXT,").
         		append(s5).append(" TEXT,").
                append(s6).append(" TEXT").
                append(");").toString();
    }
}

访问webservice封装-HttpUtils

对访问webservice 接口的请求封装

引入的包

implementation files('libs\\ksoap2-android-assembly-3.3.0-jar-with-dependencies.jar')

代码

import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.Base64;

public class HttpUtils {
    private static final String serviceNameSapce = "http://webservice.cps.xxx.com/";
    private static MyApplication myApplication = MyApplication.getInstance();
    private HttpUtils() {
    }

    //    登录
    public static String login(String METHODNAME, String username, String password,String pingid) {
        SoapObject request = new SoapObject(serviceNameSapce, METHODNAME);
        request.addProperty("username", jiami(username));
        request.addProperty("password", jiami(password));
        request.addProperty("pingid",jiami(pingid));
        request.addProperty("pingidly",null);
        return scop(request);
    }
 
    private static String scop(SoapObject request) {
        //创建SoapSerializationEnvelope 对象,同时指定soap版本号
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER10);
        envelope.bodyOut = request;//由于是发送请求,所以是设置bodyOut
        envelope.dotNet = false;//由于是.net开发的webservice
        envelope.setOutputSoapObject(request);

        HttpTransportSE httpTransportSE = new HttpTransportSE(getURl(), 400000);
        try {
            httpTransportSE.call(null, envelope);//调用
        } catch (IOException e) {
            e.printStackTrace();
            return "{\"error\":\"" + e.getMessage() + "\"}";
        } catch (XmlPullParserException e) {
            e.printStackTrace();
            return "{\"error\":\"" + e.getMessage() + "\"}";
        }

        // 获取返回的数据
        SoapObject object = (SoapObject) envelope.bodyIn;
        return object.getProperty(0).toString();
    }

    public static String jiami(String str) { //加密
        return AesUtil.aesEncrypt(str, MyApplication.getInstance().getAESKey());
    }
    public static String jiemi(String str){ //解密
        return AesUtil.aesDecrypt(str,MyApplication.getInstance().getAESKey());
    }
    public static String getURl(){
        return myApplication.getIP()+myApplication.getIP_SUFFIX();
    }
}

Toolbar封装类-MaterialToolbar

布局文件

<com.google.android.material.appbar.MaterialToolbar
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:id="@+id/titlebar"
        android:background="@color/primary1"
        style="@style/Widget.MaterialComponents.Toolbar.Surface"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:navigationIcon="@mipmap/back"
        app:title="XXXX"
        app:titleTextColor="@color/white"
        app:titleCentered="true"
        app:titleTextAppearance="@style/Text18wb"
        app:subtitle="xxxx年xx月xx日 星期x"
        app:subtitleTextColor="@color/white"
        app:subtitleCentered="true"
        app:subtitleTextAppearance="@style/Text12w"
        app:menu="@menu/scan_menu"/>

配置文件
1、input_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!--showAsAction的值always一直显示,ifRoom如果有地方就显示,没有则隐藏,never一直隐藏-->
    <item android:id="@+id/owner"
        android:title="个人中心"
        android:icon="@mipmap/owner1"
        app:showAsAction="always"/>
</menu>

2、scan_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!--showAsAction的值always一直显示,ifRoom如果有地方就显示,没有则隐藏,never一直隐藏-->
    <item android:id="@+id/clean"
        android:title="一键清空"
        android:icon="@mipmap/clean1"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/input"
        android:title="行李补录"
        android:icon="@mipmap/shoudong"
        app:showAsAction="ifRoom"/>

<!--    <item-->
<!--        android:id="@+id/setting"-->
<!--        android:title="Setting"-->
<!--        android:icon="@mipmap/ic_launcher"-->
<!--        app:showAsAction="never"/>-->
</menu>

初始化

private void initToolBar(){
        flightInputBinding.titlebar.setTitle("航班设置");
        flightInputBinding.titlebar.setSubtitle(myApplication.getDATE_WEEK());
        setSupportActionBar(flightInputBinding.titlebar);
    }

布局与按钮事件

	@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.input_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        int id = item.getItemId();
        if(id == android.R.id.home){
            Dialog.showFinishDialog(this, "确定要退出APP么?",
                    () -> myApplication.finishAllActivity());
        }else if(id == R.id.owner){
            Intent i = new Intent(FlightInputActivity.this,InfomationActivity.class);
            startActivityForResult(i,2001);
        }
        return super.onOptionsItemSelected(item);
    }

网络请求框架-OkGo

引入包

implementation 'com.lzy.net:okgo:3.0.4'

工具类
1、TrustAllCerts
此类用于绕过https验证

package com.kaiya.mvp.npm_ar.utils;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

/**
 * Created by gang.qin
 * Date:2024/3/19 15:05
 * 质量、速度、廉价,选择其中两个 --- 匿名
 */

//public class TrustAllCerts implements X509TrustManager {
//    @Override
//    public void checkClientTrusted(X509Certificate[] chain, String authType) {}
//
//    @Override
//    public void checkServerTrusted(X509Certificate[] chain, String authType) {}
//
//    @Override
//    public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}
//}

public class TrustAllCerts implements X509TrustManager {
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

        if (chain == null) {
            throw new IllegalArgumentException("  Check Server x509Certificates is null");
        }
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }


    public static SSLSocketFactory createSSLSocketFactory() {
        SSLSocketFactory ssfFactory = null;

        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom());

            ssfFactory = sc.getSocketFactory();
        } catch (Exception e) {
        }

        return ssfFactory;
    }

    public static class TrustAllHostnameVerifier implements HostnameVerifier {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }


}


2、封装

package com.kaiya.mvp.npm_ar.utils;

import android.app.Application;
import android.content.Context;
import android.transition.TransitionManager;

import com.lzy.okgo.OkGo;
import com.lzy.okgo.cookie.CookieJarImpl;
import com.lzy.okgo.cookie.store.MemoryCookieStore;
import com.lzy.okgo.interceptor.HttpLoggingInterceptor;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import okhttp3.OkHttpClient;

/**
 * Created by gang.qin
 * Date:2024/3/20 15:41
 * 质量、速度、廉价,选择其中两个 --- 匿名
 */
public class OkGoUtils {
    public static X509TrustManager xtm;
    public static SSLContext sslContext;
    public static void initOkGo(Application application){
        xtm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

            }

            @Override
            public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        };
        try {
            sslContext = SSLContext.getInstance("SSL");

            sslContext.init(null, new TrustManager[]{xtm}, new SecureRandom());

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        HostnameVerifier DO_NOT_VERIFY = (hostname, session) -> true;
        //        OkGo.getInstance().init(this); //最简单的配置 什么都不需要写 全部使用默认参数
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
//可以使用OkGo内置的log拦截器打印log,如果你觉得不好用,也可以自己写个,这个没有限制。
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("OkGo");
//log打印级别
        loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY);
//log颜色级别
        loggingInterceptor.setColorLevel(Level.ALL);
        builder.addInterceptor(loggingInterceptor);
        //全局的读取超时时间
        builder.readTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
//全局的写入超时时间
        builder.writeTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
//全局的连接超时时间
        builder.connectTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
        /*
     *  connectTimeout:指客户端和服务器 建立通道 的时间
        writeTimeout:客户端把数据写出去需要的时间
        readTimeout:客户端等待服务器返回数据的时间
        * */
        //使用内存保持cookie,app退出后,cookie消失
        builder.cookieJar(new CookieJarImpl(new MemoryCookieStore()));
        if(sslContext != null){
            builder.sslSocketFactory(sslContext.getSocketFactory(),xtm)
                    .hostnameVerifier(DO_NOT_VERIFY)
                    .build();
        }else{
            MyLog.e("mylog","过滤器出错!");
        }
        OkGo.getInstance().init(application)//必须调用初始化
                .setOkHttpClient(builder.build())  //建议设置OkHttpClient,不设置将使用默认的
                .setRetryCount(1); //超时重连,本身1次,我这边设置1次,总共2次访问
    }

    public static OkHttpClient initOkhttp(){
        OkHttpClient client = new OkHttpClient.Builder()
                .sslSocketFactory(TrustAllCerts.createSSLSocketFactory())
                .hostnameVerifier(new TrustAllCerts.TrustAllHostnameVerifier())
                .build();
        return client;
    }
}

POST请求

        private static void okgoPost(String method, HashMap<String,String> hashMap, OkGoCallback callback){
        OkGo.<String>post(getIP()+method)
                .params(hashMap)
                .execute(new StringCallback() {
                    @Override
                    public void onSuccess(Response<String> response) {
                        callback.callback(response.body());
                    }
                });
    }

下载

     OkGo.<File>get(uploadUrl)
                .tag(this)
                //.headers("header1", "headerValue1")//
                //.params("param1", "paramValue1")//
                .execute(new FileCallback(
                        saveFilePath,
                        saveName
                ) {
                    @Override
                    public void onStart(com.lzy.okgo.request.base.Request<File, ? extends com.lzy.okgo.request.base.Request> request) {
                        super.onStart(request);
                        MyLog.e("mylog","开始下载");
                    }

                    @Override
                    public void onSuccess(com.lzy.okgo.model.Response<File> response) {
                        progress.getProgress(100,"success");
                    }

                    @Override
                    public void onError(com.lzy.okgo.model.Response<File> response) {
                        super.onError(response);
                        progress.getProgress(-1,"下载出错!");

                    }

                    @Override
                    public void downloadProgress(com.lzy.okgo.model.Progress pp) {
                        super.downloadProgress(pp);
                        int ppi = (int)(pp.fraction * 100);
                        MyLog.e("mylog","progress:"+ppi);
                        progress.getProgress(ppi,"");
                    }
                });

网络请求框架-OkHttp

引入包

implementation 'com.squareup.okhttp3:okhttp:4.10.0'

封装
TrustAllCerts类 在OkGo中 。

 private static String okhttp(String method , String json){
        MyLog.e("mylog-url",getIP()+method);
                OkHttpClient client = new OkHttpClient.Builder()
                .sslSocketFactory(TrustAllCerts.createSSLSocketFactory()) //绕过https
                .hostnameVerifier(new TrustAllCerts.TrustAllHostnameVerifier()) //绕过https
                .build();
        RequestBody body = RequestBody.create(json, JSON);
        Request request = new Request.Builder()
                .url( getIP()+method )
                .post(body)
                .build();
        try{
            Response response = client.newCall(request).execute();
            return Objects.requireNonNull(response.body()).string();
        }catch (Exception e){
            MyLog.e("mylog","error:\r\n"+e.getMessage());
            return "error:\r\n"+e.getMessage();
        }
    }

调用

GetList list = new GetList(flightDate,flightNo,sourceAirport, myApplication.getAppIp()); //参数类
//list.toString() 为 类转json字符串
String response = okhttp(GET_LIST,list.toString());
        

下载

/**
     *
     * @param uploadUrl 下载路径
     * @param saveFilePath 保存路径
     * @param saveName 保存文件名 ,如 XXX.apk
     * @param progress 回调函数,获取下载进度
     */
    public void downloadApk(String uploadUrl,String saveFilePath,String saveName,Progress progress) {
        // 创建OkHttpClient并配置自定义的TrustManager
        OkHttpClient client = new OkHttpClient.Builder()
                .sslSocketFactory(TrustAllCerts.createSSLSocketFactory())
                .hostnameVerifier(new TrustAllCerts.TrustAllHostnameVerifier())
                .build();
        Request request = new Request.Builder()
                .url(uploadUrl)
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                progress.getProgress(-1,e.getMessage());
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                //3824043
                long fileMax = response.body().contentLength();
                InputStream inputStream = Objects.requireNonNull(response.body()).byteStream();
                File target = new File(saveFilePath,saveName);
                FileOutputStream fileOutputStream = new FileOutputStream(target);

                try {
                    byte[] buffer = new byte[2048];
                    int len;
                    while ((len = inputStream.read(buffer)) != -1) {
                        fileOutputStream.write(buffer, 0, len);
                        int p =  (int) ((target.length() * 100) / fileMax);
                        progress.getProgress(p,"");
                    }
                    fileOutputStream.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

    }

机场业务封装类-AirPortBNS

/**
 * 机场业务相关
 */
public class AirPortBNS {
	//三字码转汉字
	public static String getStation(String str){
	        switch (str){
	            case "CTU":
	                return "成都双流";
	            case "TFU":
	                return "成都天府";
	            case "PKX":
	                return "北京大兴";
	            case "PEK":
	                return "北京首都";
	            case "SHA":
	                return "上海虹桥";
	            case "PVG":
	                return "上海浦东";
	            case "HZG":
	                return "汉中";
	            case "YCU":
	                return "运城";
	            case "UYN":
	                return "榆林";
	            case "GYU":
	                return "固原";
	            case "CAN":
	                return "广州";
	            case "SZX":
	                return "深圳";
	            case "HAK":
	                return "海口";
	            case "NKG":
	                return "南京";
	            case "CKG":
	                return "重庆";
	            case "XIY":
	                return "西安";
	            case "CSX":
	                return "长沙";
	            case "HGH":
	                return "杭州";
	            case "HRB":
	                return "哈尔滨";
	            case "SYX":
	                return "三亚";
	            case "KMG":
	                return "昆明";
	            case "XMN":
	                return "厦门";
	            case "DLC":
	                return "大连";
	            case "WUH":
	                return "武汉";
	            case "TAO":
	                return "青岛";
	            case "URC":
	                return "乌鲁木齐";
	            case "TNA":
	                return "济南";
	            case "NNG":
	                return "南宁";
	            case "TSN":
	                return "天津";
	            case "SHE":
	                return "沈阳";
	            case "KWE":
	                return "贵阳";
	            case "KWL":
	                return "桂林";
	            case "WNZ":
	                return "温州";
	            case "FOC":
	                return "福州";
	            case "TYN":
	                return "太原";
	            case "NGB":
	                return "宁波";
	            case "KHN":
	                return "南昌";
	            case "CGQ":
	                return "长春";
	            case "CGO":
	                return "郑州";
	            case "LHW":
	                return "兰州";
	            case "HFE":
	                return "合肥";
	            case "HKG":
	                return "香港";
	            case "ZUH":
	                return "珠海";
	            case "YNT":
	                return "烟台";
	            case "SJW":
	                return "石家庄";
	            case "INC":
	                return "银川";
	            case "SWA":
	                return "汕头";
	            case "HET":
	                return "呼和浩特";
	            case "LXA":
	                return "拉萨";
	            case "YNJ":
	                return "延吉";
	            case "YIH":
	                return "宜昌";
	            case "LJG":
	                return "丽江";
	            case "MIG":
	                return "绵阳";
	            case "XNN":
	                return "西宁";
	            case "WUS":
	                return "武夷山";
	            case "CZX":
	                return "常州";
	            case "SZV":
	                return "苏州";
	            case "ZHA":
	                return "湛江";
	            case "DYG":
	                return "张家界";
	            case "TXN":
	                return "黄山";
	            case "JMU":
	                return "佳木斯";
	            case "JNZ":
	                return "锦州";
	            case "BAV":
	                return "包头";
	            case "BHY":
	                return "北海";
	            case "NTG":
	                return "南通";
	            case "YIW":
	                return "义乌";
	            case "WEH":
	                return "威海";
	            case "NAO":
	                return "南充";
	            case "CGD":
	                return "常德";
	            case "AVA":
	                return "安顺";
	            case "XUZ":
	                return "徐州";
	            case "LYG":
	                return "连云港";
	            case "MDG":
	                return "牡丹江";
	            case "YNZ":
	                return "盐城";
	            case "DNH":
	                return "敦煌";
	            case "BFU":
	                return "蚌埠";
	            case "ENH":
	                return "恩施";
	            case "XFN":
	                return "襄阳";
	            case "SIN":
	                return "新加坡";
	            case "YBP":
	                return "宜宾";
	            case "DDG":
	                return "丹东";
	            case "JJN":
	                return "晋江";
	            case "NDG":
	                return "齐齐哈尔";
	            case "AQG":
	                return "安庆";
	            case "BSD":
	                return "保山";
	            case "LYA":
	                return "洛阳";
	            case "LZO":
	                return "泸州";
	            case "KRL":
	                return "库尔勒";
	            case "LZH":
	                return "柳州";
	            case "CIF":
	                return "赤峰";
	            case "MFM":
	                return "澳门";
	            case "LYI":
	                return "临沂";
	            case "IQN":
	                return "庆阳";
	            case "HLD":
	                return "海拉尔";
	            case "HYN":
	                return "黄岩";
	            case "NRT":
	                return "东京";
	            case "FUG":
	                return "阜阳";
	            case "TSA":
	                return "台北";
	            case "SHP":
	                return "秦皇岛";
	            case "YVR":
	                return "温哥华";
	            case "JHG":
	                return "西双版纳";
	            case "JZH":
	                return "九寨沟";
	            case "DAX":
	                return "达县";
	            case "HSN":
	                return "舟山";
	            case "KNC":
	                return "吉安";
	            case "CHW":
	                return "酒泉";
	            case "NNY":
	                return "南阳";
	            case "JUZ":
	                return "衢州";
	            case "JIL":
	                return "吉林";
	            case "JGN":
	                return "嘉峪关";
	            case "JDZ":
	                return "景德镇";
	            case "HNY":
	                return "衡阳";
	            case "TEN":
	                return "铜仁";
	            case "TGO":
	                return "通辽";
	            case "WUZ":
	                return "梧州";
	            case "GOQ":
	                return "格尔木";
	            case "JIU":
	                return "九江";
	            case "AYG":
	                return "安阳";
	            case "AKU":
	                return "阿克苏";
	            case "KHG":
	                return "喀什";
	            case "ZYI":
	                return "遵义";
	            case "AKA":
	                return "安康";
	            case "DAT":
	                return "大同";
	            case "ENY":
	                return "延安";
	            case "WUT":
	                return "五台山";
	            case "SYM":
	                return "思茅";
	            case "ZAT":
	                return "昭通";
	            case "HEK":
	                return "黑河";
	            case "JGS":
	                return "井冈山";
	            case "GYS":
	                return "广元";
	            case "HTN":
	                return "和田";
	            case "SEL":
	                return "汉城";
	            case "CIH":
	                return "长治";
	            case "XIC":
	                return "西昌";
	            case "YIN":
	                return "伊宁";
	            case "MXZ":
	                return "梅县";
	            case "SGN":
	                return "胡志明";
	            case "SHS":
	                return "沙市";
	            case "HAN":
	                return "河内";
	            case "HTT":
	                return "花土沟镇";
	            case "JUH":
	                return "九华山";
	            case "WDS":
	                return "十堰";
	            case "FUO":
	                return "佛山";
	            case "AAT":
	                return "阿勒泰";
	            case "ACF":
	                return "阿拉尔塔里木";
	            case "TLQ":
	                return "吐鲁番";
	            case "DZU":
	                return "大足登云";
	            case "GHN":
	                return "广汉";
	            case "XNT":
	                return "邢台";
	            case "EJN":
	                return "额济纳旗";
	            case "WHA":
	                return "芜湖";
	            case "AHJ":
	                return "阿坝";
	            case "LLB":
	                return "荔波";
	            case "LDG":
	                return "罗定";
	            case "XEN":
	                return "兴城";
	            case "LZY":
	                return "林芝";
	            case "YLX":
	                return "玉林";
	            case "GZG":
	                return "甘孜";
	            case "WNH":
	                return "文山";
	            case "YTW":
	                return "于田万方";
	            case "LIA":
	                return "梁平";
	            case "HSJ":
	                return "上街";
	            case "LHK":
	                return "老河口";
	            case "ZFL":
	                return "昭苏";
	            case "PNJ":
	                return "沙河口";
	            case "HZA":
	                return "菏泽";
	            case "HCZ":
	                return "郴州";
	            case "CQW":
	                return "武隆";
	            case "MZG":
	                return "马公";
	            case "TPE":
	                return "桃园";
	            case "TNN":
	                return "台南";
	            case "TTT":
	                return "台东";
	            case "NZH":
	                return "满洲里";
	            case "RHT":
	                return "阿拉善右旗";
	            case "AXF":
	                return "阿拉善左旗";
	            case "CDE":
	                return "承德";
	            case "WMT":
	                return "遵义茅台";
	            case "FYJ":
	                return "抚远";
	            case "KJI":
	                return "布尔津";
	            case "QSZ":
	                return "莎车";
	            case "KHH":
	                return "高雄";
	            case "HUN":
	                return "花莲";
	            case "NAY":
	                return "北京南苑";
	            case "WUA":
	                return "乌海";
	            case "DSN":
	                return "鄂尔多斯";
	            case "EHU":
	                return "鄂州花湖";
	            case "YIE":
	                return "阿尔山";
	            case "ERL":
	                return "二连浩特";
	            case "HDG":
	                return "邯郸";
	            case "HUO":
	                return "霍林郭勒";
	            case "LFQ":
	                return "临汾";
	            case "LLV":
	                return "吕梁";
	            case "BPE":
	                return "秦皇岛北戴河";
	            case "TVS":
	                return "唐山";
	            case "UCB":
	                return "乌兰察布";
	            case "HLH":
	                return "乌兰浩特";
	            case "XIL":
	                return "锡林浩特";
	            case "NZL":
	                return "扎兰屯";
	            case "ZQZ":
	                return "张家口";
	            case "DTU":
	                return "五大连池";
	            case "JSJ":
	                return "建三江";
	            case "YSQ":
	                return "松原";
	            case "AEB":
	                return "百色";
	            case "HCJ":
	                return "河池";
	            case "HJJ":
	                return "怀化";
	            case "JMJ":
	                return "澜沧";
	            case "LNJ":
	                return "临沧博尚";
	            case "FYN":
	                return "富蕴";
	            case "NGQ":
	                return "阿里";
	            case "DIG":
	                return "迪庆";
	            case "THQ":
	                return "天水";
	            case "HUZ":
	                return "惠州";
	            case "BAR":
	                return "琼海";
	            case "XYI":
	                return "三沙";
	            case "WGN":
	                return "邵阳";
	            case "HPG":
	                return "神农架";
	            case "LLF":
	                return "永州";
	            case "BFJ":
	                return "毕节";
	            case "KJH":
	                return "凯里";
	            case "BPX":
	                return "昌都";
	            case "DLU":
	                return "大理凤仪";
	            case "GMQ":
	                return "果洛";
	            case "JIC":
	                return "金昌";
	            case "YUS":
	                return "玉树";
	            case "YZY":
	                return "张掖";
	            case "ZHY":
	                return "中卫";
	            case "WUX":
	                return "无锡";
	            case "YTY":
	                return "扬州";
	            case "DOY":
	                return "东营";
	            case "HIA":
	                return "淮安";
	            case "WEF":
	                return "潍坊";
	            case "KOW":
	                return "赣州";
	            case "JNG":
	                return "济宁";
	            case "RIZ":
	                return "日照";
	            case "SQJ":
	                return "三明";
	            case "SQD":
	                return "上饶";
	            case "DCY":
	                return "稻城";
	            case "KGT":
	                return "康定";
	            case "HZH":
	                return "黎平";
	            case "JIQ":
	                return "黔江";
	            case "WXN":
	                return "万州";
	            case "CWJ":
	                return "沧源";
	            case "LUM":
	                return "德宏芒市";
	            case "LPF":
	                return "六盘水";
	            case "NLH":
	                return "宁蒗";
	            case "RKZ":
	                return "日喀则";
	            case "TCZ":
	                return "腾冲";
	            case "HXD":
	                return "德令哈";
	            case "GXH":
	                return "夏河";
	            case "KRY":
	                return "克拉玛依";
	            case "JGD":
	                return "加格达奇";
	            case "AOG":
	                return "鞍山";
	            case "DQA":
	                return "大庆";
	            case "JXA":
	                return "鸡西";
	            case "TNH":
	                return "通化";
	            case "LDS":
	                return "伊春";
	            case "YKH":
	                return "营口";
	            case "LCX":
	                return "连城";
	            case "YIC":
	                return "宜春";
	            case "HMI":
	                return "哈密";
	            case "KCA":
	                return "库车";
	            case "NLT":
	                return "那拉提";
	            case "IQM":
	                return "且末";
	            case "SHF":
	                return "石河子";
	            case "TCG":
	                return "塔城";
	            case "KNH":
	                return "金门";
	            case "RMQ":
	                return "台中";
	            case "NBS":
	                return "长白山";
	            case "CHG":
	                return "朝阳";
	            case "OHE":
	                return "漠河";
	            case "XAI":
	                return "信阳";
	            case "YYA":
	                return "岳阳";
	            case "BZX":
	                return "巴中";
	            case "LGZ":
	                return "山南隆子机场";
	            case "DDR":
	                return "日喀则定日";
	            case "HBQ":
	                return "海北";
	            case "LNL":
	                return "陇南";
	            case "BPL":
	                return "博乐";
	            case "RQA":
	                return "若羌";
	            case "HQL":
	                return "塔什库尔干";
	            case "TWC":
	                return "图木舒克";
	            case "DXJ":
	                return "湘西";
	            case "CNI":
	                return "大长山岛";
	            case "SXJ":
	                return "鄯善";
	            case "RLK":
	                return "巴彦淖尔";
	            case "DBC":
	                return "白城";
	            case "HSC":
	                return "韶关";
	            case "DZH":
	                return "达州";
	            case "PZI":
	                return "攀枝花";
	            case "WSK":
	                return "巫山";
	            case "ACX":
	                return "兴义";
	            case "SZH":
	                return "朔州";
	            case "JBK":
	                return "江布拉克";
	            case "HJB":
	                return "巴音布鲁克";
	            case "HQQ":
	                return "安阳";
	            case "LZG":
	                return "阆中";
	            default:
	                return str;
	        }
	    }
		//航空公司二字码转图标
	    public static int getIcon(String str){
	        int i = -1;
	        switch (str){
	            case "2P":
	                i =  R.mipmap.aircorp_2p;
	                break;
	            case "3U":
	                i = R.mipmap.aircorp_3u;
	                break;
	            case "3V":
	                i = R.mipmap.aircorp_3v;
	                break;
	            case "4J":
	                i = R.mipmap.aircorp_4j;
	                break;
	            case "5J":
	                i = R.mipmap.aircorp_5j;
	                break;
	            case "5M":
	                i = R.mipmap.aircorp_5m;
	                break;
	            case "5X":
	                i = R.mipmap.aircorp_5x;
	                break;
	            case "6U":
	                i = R.mipmap.aircorp_6u;
	                break;
	            case "7C":
	                i = R.mipmap.aircorp_7c;
	                break;
	            case "8C":
	                i = R.mipmap.aircorp_8c;
	                break;
	            case "8L":
	                i = R.mipmap.aircorp_8l;
	                break;
	            case "8M":
	                i = R.mipmap.aircorp_8m;
	                break;
	            case "8Y":
	                i = R.mipmap.aircorp_8y;
	                break;
	            case "9C":
	                i = R.mipmap.aircorp_9c;
	                break;
	            case "9H":
	                i = R.mipmap.aircorp_9h;
	                break;
	            case "9W":
	                i = R.mipmap.aircorp_9w;
	                break;
	            case "AA":
	                i = R.mipmap.aircorp_aa;
	                break;
	            case "AB":
	                i = R.mipmap.aircorp_ab;
	                break;
	            case "AC":
	                i = R.mipmap.aircorp_ac;
	                break;
	            case "AF":
	                i = R.mipmap.aircorp_af;
	                break;
	            case "AH":
	                i = R.mipmap.aircorp_ah;
	                break;
	            case "AI":
	                i = R.mipmap.aircorp_ai;
	                break;
	            case "AK":
	                i = R.mipmap.aircorp_ak;
	                break;
	            case "AM":
	                i = R.mipmap.aircorp_am;
	                break;
	            case "AQ":
	                i = R.mipmap.aircorp_aq;
	                break;
	            case "AY":
	                i = R.mipmap.aircorp_ay;
	                break;
	            case "AZ":
	                i = R.mipmap.aircorp_az;
	                break;
	            case "B7":
	                i = R.mipmap.aircorp_b7;
	                break;
	            case "BA":
	                i = R.mipmap.aircorp_ba;
	                break;
	            case "BI":
	                i = R.mipmap.aircorp_bi;
	                break;
	            case "BK":
	                i = R.mipmap.aircorp_bk;
	                break;
	            case "BR":
	                i = R.mipmap.aircorp_br;
	                break;
	            case "BX":
	                i = R.mipmap.aircorp_bx;
	                break;
	            case "CA":
	                i = R.mipmap.aircorp_ca;
	                break;
	            case "CI":
	                i = R.mipmap.aircorp_ci;
	                break;
	            case "CK":
	                i = R.mipmap.aircorp_ck;
	                break;
	            case "CN":
	                i = R.mipmap.aircorp_cn;
	                break;
	            case "CO":
	                i = R.mipmap.aircorp_co;
	                break;
	            case "CX":
	                i = R.mipmap.aircorp_cx;
	                break;
	            case "CY":
	                i = R.mipmap.aircorp_cy;
	                break;
	            case "CZ":
	                i = R.mipmap.aircorp_cz;
	                break;
	            case "DD":
	                i = R.mipmap.aircorp_dd;
	                break;
	            case "DL":
	                i = R.mipmap.aircorp_dl;
	                break;
	            case "DR":
	                i = R.mipmap.aircorp_dr;
	                break;
	            case "DT":
	                i = R.mipmap.aircorp_dt;
	                break;
	            case "DZ":
	                i = R.mipmap.aircorp_dz;
	                break;
	            case "E8":
	                i = R.mipmap.aircorp_e8;
	                break;
	            case "EK":
	                i = R.mipmap.aircorp_ek;
	                break;
	            case "ET":
	                i = R.mipmap.aircorp_et;
	                break;
	            case "EU":
	                i = R.mipmap.aircorp_eu;
	                break;
	            case "EY":
	                i = R.mipmap.aircorp_ey;
	                break;
	            case "FD":
	                i = R.mipmap.aircorp_fd;
	                break;
	            case "FE":
	                i = R.mipmap.aircorp_fe;
	                break;
	            case "FG":
	                i = R.mipmap.aircorp_fg;
	                break;
	            case "FI":
	                i = R.mipmap.aircorp_fi;
	                break;
	            case "FL":
	                i = R.mipmap.aircorp_fl;
	                break;
	            case "FM":
	                i = R.mipmap.aircorp_fm;
	                break;
	            case "FU":
	                i = R.mipmap.aircorp_fu;
	                break;
	            case "G5":
	                i = R.mipmap.aircorp_g5;
	                break;
	            case "GA":
	                i = R.mipmap.aircorp_ga;
	                break;
	            case "GE":
	                i = R.mipmap.aircorp_ge;
	                break;
	            case "GF":
	                i = R.mipmap.aircorp_gf;
	                break;
	            case "GJ":
	                i = R.mipmap.aircorp_gj;
	                break;
	            case "GS":
	                i = R.mipmap.aircorp_gs;
	                break;
	            case "GX":
	                i = R.mipmap.aircorp_gx;
	                break;
	            case "HO":
	                i = R.mipmap.aircorp_ho;
	                break;
	            case "HU":
	                i = R.mipmap.aircorp_hu;
	                break;
	            case "HX":
	                i = R.mipmap.aircorp_hx;
	                break;
	            case "HY":
	                i = R.mipmap.aircorp_hy;
	                break;
	            case "HZ":
	                i = R.mipmap.aircorp_hz;
	                break;
	            case "IB":
	                i = R.mipmap.aircorp_ib;
	                break;
	            case "IR":
	                i = R.mipmap.aircorp_ir;
	                break;
	            case "JD":
	                i = R.mipmap.aircorp_jd;
	                break;
	            case "JL":
	                i = R.mipmap.aircorp_jl;
	                break;
	            case "JQ":
	                i = R.mipmap.aircorp_jq;
	                break;
	            case "JR":
	                i = R.mipmap.aircorp_jr;
	                break;
	            case "JS":
	                i = R.mipmap.aircorp_js;
	                break;
	            case "KA":
	                i = R.mipmap.aircorp_ka;
	                break;
	            case "KC":
	                i = R.mipmap.aircorp_kc;
	                break;
	            case "KE":
	                i = R.mipmap.aircorp_ke;
	                break;
	            case "KL":
	                i = R.mipmap.aircorp_kl;
	                break;
	            case "KN":
	                i = R.mipmap.aircorp_kn;
	                break;
	            case "KQ":
	                i = R.mipmap.aircorp_kq;
	                break;
	            case "KY":
	                i = R.mipmap.aircorp_ky;
	                break;
	            case "KZ":
	                i = R.mipmap.aircorp_kz;
	                break;
	            case "LA":
	                i = R.mipmap.aircorp_la;
	                break;
	            case "LH":
	                i = R.mipmap.aircorp_lh;
	                break;
	            case "LJ":
	                i = R.mipmap.aircorp_lj;
	                break;
	            case "LO":
	                i = R.mipmap.aircorp_lo;
	                break;
	            case "LX":
	                i = R.mipmap.aircorp_lx;
	                break;
	            case "LY":
	                i = R.mipmap.aircorp_ly;
	                break;
	            case "M0":
	                i = R.mipmap.aircorp_m0;
	                break;
	            case "MA":
	                i = R.mipmap.aircorp_ma;
	                break;
	            case "MD":
	                i = R.mipmap.aircorp_md;
	                break;
	            case "MF":
	                i = R.mipmap.aircorp_mf;
	                break;
	            case "MH":
	                i = R.mipmap.aircorp_mh;
	                break;
	            case "MI":
	                i = R.mipmap.aircorp_mi;
	                break;
	            case "MK":
	                i = R.mipmap.aircorp_mk;
	                break;
	            case "MM":
	                i = R.mipmap.aircorp_mm;
	                break;
	            case "MR":
	                i = R.mipmap.aircorp_mr;
	                break;
	            case "MS":
	                i = R.mipmap.aircorp_ms;
	                break;
	            case "MU":
	                i = R.mipmap.aircorp_mu;
	                break;
	            case "NH":
	                i = R.mipmap.aircorp_nh;
	                break;
	            case "NS":
	                i = R.mipmap.aircorp_ns;
	                break;
	            case "NW":
	                i = R.mipmap.aircorp_nw;
	                break;
	            case "NX":
	                i = R.mipmap.aircorp_nx;
	                break;
	            case "NZ":
	                i = R.mipmap.aircorp_nz;
	                break;
	            case "OQ":
	                i = R.mipmap.aircorp_oq;
	                break;
	            case "OS":
	                i = R.mipmap.aircorp_os;
	                break;
	            case "OX":
	                i = R.mipmap.aircorp_ox;
	                break;
	            case "OZ":
	                i = R.mipmap.aircorp_oz;
	                break;
	            case "PG":
	                i = R.mipmap.aircorp_pg;
	                break;
	            case "PK":
	                i = R.mipmap.aircorp_pk;
	                break;
	            case "PN":
	                i = R.mipmap.aircorp_pn;
	                break;
	            case "PR":
	                i = R.mipmap.aircorp_pr;
	                break;
	            case "Q4":
	                i = R.mipmap.aircorp_q4;
	                break;
	            case "QF":
	                i = R.mipmap.aircorp_qf;
	                break;
	            case "QH":
	                i = R.mipmap.aircorp_qh;
	                break;
	            case "QR":
	                i = R.mipmap.aircorp_qr;
	                break;
	            case "QV":
	                i = R.mipmap.aircorp_qv;
	                break;
	            case "QW":
	                i = R.mipmap.aircorp_qw;
	                break;
	            case "RA":
	                i = R.mipmap.aircorp_ra;
	                break;
	            case "RG":
	                i = R.mipmap.aircorp_rg;
	                break;
	            case "S7":
	                i = R.mipmap.aircorp_s7;
	                break;
	            case "SA":
	                i = R.mipmap.aircorp_sa;
	                break;
	            case "SC":
	                i = R.mipmap.aircorp_sc;
	                break;
	            case "SK":
	                i = R.mipmap.aircorp_sk;
	                break;
	            case "SQ":
	                i = R.mipmap.aircorp_sq;
	                break;
	            case "SU":
	                i = R.mipmap.aircorp_su;
	                break;
	            case "SV":
	                i = R.mipmap.aircorp_sv;
	                break;
	            case "T5":
	                i = R.mipmap.aircorp_t5;
	                break;
	            case "TE":
	                i = R.mipmap.aircorp_te;
	                break;
	            case "TG":
	                i = R.mipmap.aircorp_tg;
	                break;
	            case "TH":
	                i = R.mipmap.aircorp_th;
	                break;
	            case "TK":
	                i = R.mipmap.aircorp_tk;
	                break;
	            case "TR":
	                i = R.mipmap.aircorp_tr;
	                break;
	            case "TV":
	                i = R.mipmap.aircorp_tv;
	                break;
	            case "TW":
	                i = R.mipmap.aircorp_tw;
	                break;
	            case "U6":
	                i = R.mipmap.aircorp_u6;
	                break;
	            case "UA":
	                i = R.mipmap.aircorp_ua;
	                break;
	            case "UL":
	                i = R.mipmap.aircorp_ul;
	                break;
	            case "UO":
	                i = R.mipmap.aircorp_uo;
	                break;
	            case "UQ":
	                i = R.mipmap.aircorp_uq;
	                break;
	            case "UX":
	                i = R.mipmap.aircorp_ux;
	                break;
	            case "VD":
	                i = R.mipmap.aircorp_vd;
	                break;
	            case "VN":
	                i = R.mipmap.aircorp_vn;
	                break;
	            case "VS":
	                i = R.mipmap.aircorp_vs;
	                break;
	            case "VT":
	                i = R.mipmap.aircorp_vt;
	                break;
	            case "VV":
	                i = R.mipmap.aircorp_vv;
	                break;
	            case "XF":
	                i = R.mipmap.aircorp_xf;
	                break;
	            case "YI":
	                i = R.mipmap.aircorp_yi;
	                break;
	            case "Z2":
	                i = R.mipmap.aircorp_z2;
	                break;
	            case "ZA":
	                i = R.mipmap.aircorp_za;
	                break;
	            case "ZE":
	                i = R.mipmap.aircorp_ze;
	                break;
	            case "ZH":
	                i = R.mipmap.aircorp_zh;
	                break;
	            case "ZP":
	                i = R.mipmap.aircorp_zp;
	                break;
	            default:
	                i = R.mipmap.aircorp_weizhi;
	                break;
	        }
	        return i;
    	}
    }

航司图标_高清-百度网盘
提取码:rya4
航司图标-百度网盘
提取码:rmmq
:暂时用百度网盘了,其他方式可能会收费

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值