博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 一些 utils
阅读量:6112 次
发布时间:2019-06-21

本文共 13031 字,大约阅读时间需要 43 分钟。

一 Paint ,Canvas

public class drawView extends View{    private Paint paint1;    public drawView(Context context,AttributeSet set ){        super(context,set);    }             public void onDraw(Canvas canvas){                super.onDraw(canvas);                //new 一个画笔对象        paint1= new Paint();        canvas.drawColor(Color.TRANSPARENT);        //给画笔设置 属性        paint1.setAntiAlias(true);        paint1.setColor(Color.GRAY);        paint1.setStyle(Paint.Style.FILL);        paint1.setStrokeWidth(3);         //画一个圆        //canvas.drawCircle(arg0, arg1, arg2, arg3);        canvas.drawCircle(10, 10, 5, paint1);        }}

二 AsyncImageTask

/*     *  //默认开启的线程数为128条如果超过128条会放进队列进行排队        //继承AsyncTask时指定三个参数第一个为要传入的参数类型 第二个为进度的参数类型 第三个为返回结果的参数类型        //当调用execute时首先执行preExecute然后在执行去启用线程池的execute        //这时会启动子线程去执行doinbackground--执行完后AsyncTask内部会有Handler将结果返回到UI线程中        //也就是onPostExecute的这个方法然后在进行UI界面的更新     */     private  void asyncImageLoad(ImageView imageView, String path) {            AsyncImageTask asyncImageTask = new AsyncImageTask(imageView);            asyncImageTask.execute(path);                    }      private final class AsyncImageTask extends AsyncTask
{ private ImageView imageView; public AsyncImageTask(ImageView imageView) { this.imageView = imageView; } protected Uri doInBackground(String... params) {//子线程中执行的 try { Uri uu = ContactService.getImage(params[0], cache);//将URI路径抛给主线程 System.out.println(uu+" zuuuuuuuu"); return uu; } catch (Exception e) { e.printStackTrace(); } return null; } protected void onPostExecute(Uri result) {//运行在主线程,获取 URI 路径 ,进行图片更新 Log.i("Test", result+""); if(result!=null && imageView!= null) imageView.setImageURI(result);//setImageURI这个方法会根据路径加载图片 } }

三 截取字符串

//截取字符串  从 0 到 第一个 "/" 字符 String name = result.substring(0,result.indexOf("/"));//截取字符串  从 第一个 字符 “/”  到  最后一个 “/” 字符 String name = result.substring(result.indexOf("/")+1, result.lastIndexOf("/")));

四 MD5广泛用于加密

import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5 {    public static String getMD5(String content) {        try {            MessageDigest digest = MessageDigest.getInstance("MD5");            digest.update(content.getBytes());            return getHashString(digest);                    } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        }        return null;    }        private static String getHashString(MessageDigest digest) {        StringBuilder builder = new StringBuilder();        for (byte b : digest.digest()) {            builder.append(Integer.toHexString((b >> 4) & 0xf));            builder.append(Integer.toHexString(b & 0xf));        }        return builder.toString();    }}

五 读取流中的字节:

import java.io.ByteArrayOutputStream;import java.io.InputStream;public class StreamTool {    /**     * 读取流中的数据     * @param inStream     * @return     * @throws Exception     */    public static byte[] read(InputStream inStream) throws Exception{        ByteArrayOutputStream outStream = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        int len = 0;        while( (len = inStream.read(buffer)) != -1){            outStream.write(buffer, 0, len);        }        inStream.close();        return outStream.toByteArray();    }}

六 解析服务器传过来的 xml 数据流

/*     * 得到解析 xml 后 的 Contact list 集合     */    public static List
getContacts() throws Exception { String path = StringTools.getURL_list_xml; URL url = new URL(path); //URLConnection与HttPURLConnection都是抽象类,无法直接实例化对象。 //其对象主要通过URL的openconnection方法获得。 //利用HttpURLConnection对象从网络中获取网页数据 HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setReadTimeout(5000); con.setRequestMethod("GET"); if(con.getResponseCode() == 200){ //http协议,里面有相应状态码的解释, //这里如楼上所说是判断是否正常响应请求数据. return parseXML(con.getInputStream()); //FFF //return StreamTool.read(con.getInputStream()); } return null; }
其中   parseXML(con.getInputStream());    /*     * 解析XMl      */     private static List
parseXML(InputStream xml) throws Exception { List
contacts = new ArrayList
(); Contact contact = null; XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(xml,"UTF-8"); int event = pullParser.getEventType(); while(event != XmlPullParser.END_DOCUMENT){ switch (event) { case XmlPullParser.START_TAG : if("contact".equals(pullParser.getName())){ contact = new Contact(); contact.id = new Integer(pullParser.getAttributeValue(0)); }else if("name".equals(pullParser.getName())){ contact.name = pullParser.nextText();// .nextText 不是 .getText !!!! }else if("image".equals(pullParser.getName())){ contact.imageUrl = pullParser.getAttributeValue(0);//FFF } break; case XmlPullParser.END_TAG : if("contact".equals(pullParser.getName())){ contacts.add(contact); contact = null; } break; } event = pullParser.next(); } return contacts; }

七 解析 服务器传过来的 Json 数据:

/*     * 解析 Json 数据     */    private static List
parseJson(InputStream inputStream) throws Exception { List
SecondActivity_Goods_Beans = new ArrayList
(); SecondActivity_Goods_Bean goodBean = null; byte[] data = StreamTool.read(inputStream); String json = new String(data); JSONArray array = new JSONArray(json); for(int i=0;i

八 向服务器提交数据:

private static String sendPostRequest(String path,Map
parame, String encoding) throws Exception { //StringBuilder 来组合成这段数据 发给服务器 telephone_number=telephone_number&password=password StringBuilder data = new StringBuilder(); if(parame != null && !parame.isEmpty()){ for(Map.Entry
entry:parame.entrySet()){ data.append(entry.getKey()).append("="); data.append(URLEncoder.encode(entry.getValue(), encoding)); data.append("&"); } data.deleteCharAt(data.length() -1);//最后会多出 “&” } byte[] entity = data.toString().getBytes();//默认得到UTF-8的字节码 HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("POST"); //采用 POST 向服务器发送请求 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//设置Post请求的 头字段 conn.setRequestProperty("Content-Length", String.valueOf(entity.length));//设置Post请求的 头字段 OutputStream outStream = conn.getOutputStream();//得到数据输出流 outStream.write(entity);//将数据写给 http输出流缓冲区 if(conn.getResponseCode() == 200){ //的android客户端向服务器请求 请求码 时 数据输出流的缓冲区才把数据写给服务器 //String s = conn.getResponseMessage();//这个方法得到字符串 “OK” /* * 得到服务器返回的数据!!! 得到服务器的返回值就可以判断数据是否上传成功 */ byte[] stringData = StreamTool.read(conn.getInputStream()); String stringFlag = new String(stringData,"UTF-8"); return stringFlag; // 数据发送成功 返回 true } return "Submit_Fail"; }

九 SharedPreferences

public class SharedPreferences_Service {    private Context context;    private SharedPreferences sp;    public SharedPreferences_Service(Context applicationCon){        this.context = applicationCon;    }    /**     * 将 文件存储在  File Explorer的data/data/相应的包名/Rsgistered_form.xml 下导出该文件     * @param name     * @param telephone_number     * @param password     */    public void SetParament(String name,String telephone_number,String password){        sp = context.getSharedPreferences("Rsgistered_form", context.MODE_APPEND);        Editor et = sp.edit();        et.putString("name", name);        et.putString("telephone_number",telephone_number);        et.putString("password",password);        et.commit();    }    /**     * 在文件夹  File Explorer的data/data/相应的 Rsgistered_form.xml下取数据     * @return     */    public Map
GetParament(){ Map
parmes = new HashMap
(); sp = context.getSharedPreferences("Rsgistered_form", context.MODE_APPEND); parmes.put("name", sp.getString("name", ""));//获得name字段,参数为空就返回空 parmes.put("telephone_number", sp.getString("telephone_number", "")); parmes.put("password", sp.getString("password", "")); return parmes; }}

十 <!-- 设置圆角半径 --><!-- 渐变 -->

来源:
也可以在 drawable 文件夹下 在定义个  xxx.xml  使用 selector
定义一个有四个角弧度的 长方形背景

十一 anim文件

// anim 文件夹下 的  out.xml 动画文件

2016 - 7 - 24 ..........................更新...........................

十二 ,将 Raw 加载数据库 导入 手机文件夹下

clipboard.png

private SQLiteDatabase openDatabase(String dbfile) {        try {            if (!(new File(dbfile).exists())) {                //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库                InputStream is = this.context.getResources().openRawResource(R.raw.china_city); //欲导入的数据库                FileOutputStream fos = new FileOutputStream(dbfile);                byte[] buffer = new byte[BUFFER_SIZE];                int count = 0;                while ((count = is.read(buffer)) > 0) {                    fos.write(buffer, 0, count);                }                fos.close();                is.close();            }            return SQLiteDatabase.openOrCreateDatabase(dbfile, null);        } catch (FileNotFoundException e) {            PLog.e("File not found");            e.printStackTrace();        } catch (IOException e) {            PLog.e("IO exception");            e.printStackTrace();        }        return null;    }

十三 , 双击退出应用

public class DoubleClickExit {    /**     * 双击退出检测, 阈值 2000ms     */    public static long lastClick = 0L;    private static final int THRESHOLD = 2000;// 2000ms    public static boolean check() {        long now = System.currentTimeMillis();        boolean b = now - lastClick < THRESHOLD;        lastClick = now;        return b;    }}
@Override    public void onBackPressed() {        if (!DoubleClickExit.check()) {                ToastUtil.showShort(getString(R.string.double_exit));            } else {                finish();            }    }

2016 - 7 - 27 ..........................更新...........................

十四 EditText 一些设置:

//设置点击后 软键盘的 显示类型 ,numberDecimal带小数点的数字android:inputType="numberDecimal"
// 设置alertDialog中的 editView  自动弹出软键盘 editView.setOnFocusChangeListener(new View.OnFocusChangeListener() {            @Override            public void onFocusChange(View v, boolean hasFocus) {                if (hasFocus) {                    // 设置 弹出软键盘                    alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);                }            }        });

十五 Calendar

mCalendar= Calendar.getInstance();//获取当前日期        int_YEAR = mCalendar.get(Calendar.YEAR);        int_MONTH = mCalendar.get(Calendar.MONTH);        int_DAT = mCalendar.get(Calendar.DAY_OF_MONTH);        int_lastday=mCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);        int_week =  mCalendar.get(Calendar.DAY_OF_WEEK);

十六 DialogFragment ,DialogFragment官方推荐使用的,好处就不多说

public class YourDialogFragment extends DialogFragment {      public interface DialogFragmentDataImp{//定义一个与Activity通信的接口,使用该DialogFragment的Activity须实现该接口        void showMessage(String message);    }    public static YourDialogFragment newInstance(String message){        //创建一个带有参数的Fragment实例        YourDialogFragment fragment = new YourDialogFragment ();        Bundle bundle = new Bundle();        bundle.putString("message", message);        fragment.setArguments(bundle);//把参数传递给该DialogFragment        return fragment;    }    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        View customView = LayoutInflater.from(getActivity()).inflate(                R.layout.fragment_edit_bill_dialog, null);        //ButterKnife.bind(this,customView);        mContext = getActivity();        initView();        return new AlertDialog.Builder(getActivity()).setView(customView)                .create();    }

使用(在 activity 或 fragment 调用):

YourDialogFragment dialog = new YourDialogFragment();        dialog.show(getFragmentManager(), "loginDialog");
你可能感兴趣的文章
22. linux 常用命令
查看>>
ASP.Net 使用GridView模板删除一行的用法
查看>>
(十六)字段表集合
查看>>
JPGraph
查看>>
实验二 Java面向对象程序设计
查看>>
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
(转)HTML的代码(从朋友那转的,看着觉得会有用就转了)
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>
416. Partition Equal Subset Sum
查看>>
centos7.0 64位系统安装 nginx
查看>>
数据库运维平台~自动化上线审核需求
查看>>
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>