android 一些工具类汇总

作者:曾田生z 字体:[增加 减小] 类型:转载 时间:2016-08-14我要评论

本文给大家汇总介绍了一些常用的Android工具类,非常的简单实用,有需要的小伙伴可以参考下

一 Paint ,Canvas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
 * //默认开启的线程数为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<String, Integer, Uri>{
  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这个方法会根据路径加载图片
  }
 }

三 截取字符串

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

四 MD5广泛用于加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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();
  }
}

五 读取流中的字节:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 数据流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
   * 得到解析 xml 后 的 Contact list 集合
   */
  public static List<Contact> 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());

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
 * 解析XMl
 */
 private static List<Contact> parseXML(InputStream xml) throws Exception {
  List<Contact> contacts = new ArrayList<Contact>();
  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 数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
   * 解析 Json 数据
   */
  private static List<SecondActivity_Goods_Bean> parseJson(InputStream inputStream) throws Exception {
     
    List<SecondActivity_Goods_Bean> SecondActivity_Goods_Beans = new ArrayList<SecondActivity_Goods_Bean>();
    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<array.length();i++){
      JSONObject jsonObject = array.getJSONObject(i);
      jsonObject.getString("imageUrl");
      jsonObject.getString("imageContent");
      jsonObject.getString("goodsPrice");
      goodBean = new SecondActivity_Goods_Bean(jsonObject.getString("imageUrl"),
                           jsonObject.getString("imageContent"),
                           jsonObject.getString("goodsPrice"));
      SecondActivity_Goods_Beans.add(goodBean);
    }
    return null;
  }

八 向服务器提交数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private static String sendPostRequest(String path,Map<String, String> parame, String encoding)
throws Exception {
  //StringBuilder 来组合成这段数据 发给服务器   telephone_number=telephone_number&password=password
  StringBuilder data = new StringBuilder();
  if(parame != null && !parame.isEmpty()){
    for(Map.Entry<String, String> 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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<String, String> GetParament(){
    Map<String, String> parmes = new HashMap<String, String>();
    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;
  }
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="utf-8"?>
  android:shape="rectangle" >
  <!-- 圆角 -->
<corners
    android:radius="9dp"
    android:topLeftRadius="2dp"
    android:topRightRadius="2dp"
    android:bottomLeftRadius="2dp"
    android:bottomRightRadius="2dp"/>
<!-- 设置圆角半径 --><!-- 渐变 -->
<gradient
    android:startColor="@android:color/white"
    android:centerColor="@android:color/black"
    android:endColor="@android:color/black"
    android:useLevel="true"
    android:angle="45"
    android:type="radial"
    android:centerX="0"
    android:centerY="0"
    android:gradientRadius="90"/>
<!-- 间隔 -->
<padding
    android:left="2dp"
    android:top="2dp"
    android:right="2dp"
    android:bottom="2dp"/>
<!-- 各方向的间隔 --><!-- 大小 -->
<size
    android:width="50dp"
    android:height="50dp"/>
<!-- 宽度和高度 --><!-- 填充 -->
<solid
    android:color="@android:color/white"/>
<!-- 填充的颜色 --><!-- 描边 -->
<stroke
    android:width="2dp"
    android:color="@android:color/black"
    android:dashWidth="1dp"
    android:dashGap="2dp"/>
  
</shape>

也可以在 drawable 文件夹下 在定义个  xxx.xml  使用 selector

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
 <item android:drawable="@drawable/button_pressed_bg" android:state_pressed="true"></item>
 <item android:drawable="@drawable/shape_image"></item>
</selector>

定义一个有四个角弧度的 长方形背景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
  android:shape="rectangle" >
  <!-- 指定4個角的弧度 -->
  <corners android:topLeftRadius="2px"
    android:topRightRadius="2px"
    android:bottomLeftRadius="2px"
    android:bottomRightRadius="2px"/>
  <!-- 指定背景顏色 -->
  <solid android:color="#FFFFFF"/>
  <!-- 指定框條的顏色的寬度 -->
  <stroke android:width="0.5dp" android:color="#7A7A7A"/>
   
</shape>

十一 anim文件

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
  android:shareInterpolator="false">
  <!-- 100%p 的 p 是指从父类view 的 指定位置 0 到 起始位 100%-->
  <!-- 位移 -->
   <translate
    android:fromXDelta="0%p"
    android:toXDelta="100%p"
    android:duration="1000"
    />
   <!-- 透明度 -->
   <alpha
    android:fromAlpha="1.0"
    android:toAlpha="0.5"
    android:duration="500"
    />  
</set>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
  }

十三 , 双击退出应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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();
      }
  }

十四 EditText 一些设置:

1
2
3
4
5
6
7
8
9
10
11
12
//设置点击后 软键盘的 显示类型 ,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

1
2
3
4
5
6
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官方推荐使用的,好处就不多说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 调用):

1
2
YourDialogFragment dialog = new YourDialogFragment();
   dialog.show(getFragmentManager(), "loginDialog");

如对本文有疑问,请提交到交流社区,广大热心网友会为你解答!!  点击进入社区

 
 

最新评论

评论(0人参与,0条评论)
 
 
 

(转载)android 一些工具类汇总的更多相关文章

  1. 53. Android常用工具类

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...

  2. Android 常见工具类封装

    1,MD5工具类: public class MD5Util { public final static String MD5(String s) { char hexDigits[] = { '0' ...

  3. 【转】Android常用工具类

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefe ...

  4. 【转载】C#工具类:人民币金额转换为中文大写

    在涉及到金融业务这一块的系统设计中,时常能够遇到的情况是需要将阿拉伯数字的人民币金额自动转换为中文的大写金额.现在互联网上也有很多网站提供此类服务,只要你输入人民币的阿拉伯数字金额,输入后自动给你转换 ...

  5. 【转载】C#工具类:Json操作帮助类

    Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON.数据 ...

  6. 【转载】 C#工具类:Csv文件转换类

    CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本).CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号 ...

  7. 【转载】C#工具类:FTP操作辅助类FTPHelper

    FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样.可以通过C#中的FtpWebRequest类.NetworkCredential类.We ...

  8. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  9. Android基础工具类重构系列一Toast

    前言: 一直在考虑写一下Android实际项目中的一些总结,翻看CSDN博客,上一篇已经是一年多曾经. 本系列定位Android基础工具类重构.旨在记录实际项目中经经常使用到的一些工具类,比方Toas ...

随机推荐

  1. OpenCart 如何安装 vQmod 教程

    vQmod (全称 Virtual Quick Mod),是 OpenCart (PHP 开源电商网站系统)上一个可以以虚拟方式修改原文件内容而设计的一个插件系统.它的使用很简单,我们先用 xml 的 ...

  2. eclipse 启动程序时错误弹窗:multiple problems have occurred

    .log内容如下: !ENTRY org.eclipse.ui 4 4 2017-04-14 09:31:05.341!MESSAGE An internal error has occurred.! ...

  3. 前端精选文摘:css之BFC 神奇背后的原理(转载)

    一.BFC是什么? 在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观点来说 ...

  4. 洛谷P1816 忠诚 分块

    分块真的是很暴力呀… 暴力查询左端,暴力查询又端点,中间整体部分直接 $O(1)$ 求出. 注意编程细节:belong[i]=(i−1)/block+1,这样可以保证序列被分成这样的: Code: # ...

  5. CentOS 7 安装配置MySQL

    环境 CentOS Linux release 7.5.1804 (Core) MySQL:mysql80-community-release-el7-1 检查: 在centos7中默认的是maria ...

  6. ES6 Symbol类型 附带:Proxy和Set

    七种数据类型 ·Symbol ·undefined ·null ·Boolean ·String ·Number ·Object let a = Symbol('this is a symbol'); ...

  7. 【XSY2989】字符串

    题目来源:NOI2018模拟测试赛(二十六) 题解: 首先由于这是个01串,所以反对称串的意思就是这个字符串的后半部分是前半部分的反转且翻转结果: 一个串出现有三种情况:在前半部分,在后半部分或穿过中 ...

  8. 2019-03-18 Python time 将2015年11月20日转换为2015-11-20

    #ReportingDate = soup.select('body > div.main > div > div.ctr > div.recruit > ul > ...

  9. open函数详解

    转载:https://www.cnblogs.com/frank-yxs/p/5925574.html open函数用来在进程中打开文件,如果成功则返回一个文件描述符fd. ============= ...

  10. ArcEngine 一些实现代码

    转自原文 ArcEngine 一些实现代码     ●·● 目录: A1 …………实现:鼠标滑过显示要素 tip A2 …………实现:通过鼠标选择要素并高亮显示(ISelectionEnvironme ...