美文网首页
常用方法整理

常用方法整理

作者: f44148db1e8c | 来源:发表于2019-05-18 16:08 被阅读0次

    均属于笔记,仅供个人参考,有问题欢迎指正

    一,Xml文件解析,现在已经用的很少了,基本都是json

    三,尺寸

    四,日期

    五,相机的原始使用

    六,ListView图片错乱处理


    一,Xml文件解析,现在已经用的很少了,基本都是json

    /**

    * 以Pull方式解析XML文件的基本知识点:

    *  常用的有:

    *  XmlPullParser.END_DOCUMENT

    *  XmlPullParser.START_DOCUMENT

    *  XmlPullParser.START_TAG

    *  XmlPullParser.END_TAG

    *  XmlPullParser.TEXT

    *  分别代表着XML文档的结束,开始,标签的开始,标签的结束,内容

    *  主要方法:

    *  next():获取下一个解析事件

    *  getAttributte():获取属性的值

    *  nextText():获取本节点的值

    */

    public class XML_Pull {

    /**

    * 模板方法,具体XML文件具体解析

    * 创建XmlPullParser

    * 创建XmlPullParser方式有两种:

    * 方式一:通过XmlPullParserFactory创建

    * 方式二:通过Android.util.Xml类

    * @return

    * @throws XmlPullParserException

    * @throws IOException

    */

    public String PullXml(String xml) throws Exception {

    // 1,构造工厂实例

    XmlPullParserFactory xpf = XmlPullParserFactory.newInstance();

    // 2,创建解析对象

    XmlPullParser parser = xpf.newPullParser(); //通过XmlPullParserFactory创建

    // XmlPullParser parser = Xml.newPullParser(); //通过Android.util.Xml类

    // 3,设置数据源

    parser.setInput(new StringReader(xml));

    // XmlResourceParser xrp = getResources().getXml(R.xml.channels); //可以直接放在Activity中使用,读取本地XML形式的文件

    // 4,设置存储解析后数据的容器,可使用StringBuffer或者JavaBean。

    StringBuffer stb = new StringBuffer();

    // JavaBean bean = new JavaBean();

    // 5,解析xml数据,不同的XML文件则有不同的标签

    // 直到文档的结尾处

    while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {

    // 如果遇到了开始标签

    if (parser.getEventType() == XmlPullParser.START_TAG) {

    String tagName = parser.getName();// 获取标签的名字

    if (tagName.equals("string")) {

    String st = parser.nextText();

    stb.append(st);

    }

    }

    parser.next();// 获取解析下一个事件

    }

    return stb.toString();

    }

    /**

    * 解析邮编地址信息

    * @throws XmlPullParserException

    */

    public String getAddressByZipCode(String result) throws Exception {

    // 1,构造工厂实例

    XmlPullParserFactory xpf = XmlPullParserFactory.newInstance();

    // 2,创建解析对象

    XmlPullParser parser = xpf.newPullParser();

    // 3,设置数据源

    parser.setInput(new StringReader(result));

    // 4,设置存储解析后数据的容器,可使用StringBuffer或者JavaBean。

    StringBuffer stb = new StringBuffer();

    // JavaBean bean = new JavaBean();

    // 5,解析xml数据

    // 直到文档的结尾处

    while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {

    // 如果遇到了开始标签

    if (parser.getEventType() == XmlPullParser.START_TAG) {

    String tagName = parser.getName();// 获取标签的名字

    if (tagName.equals("PROVINCE")) {

    String st = parser.nextText();

    stb.append(st);

    }

    if (tagName.equals("CITY")) {

    String st = parser.nextText();

    stb.append(st);

    }

    if (tagName.equals("ADDRESS")) {

    String st = parser.nextText();

    stb.append(st);

    }

    if (tagName.equals("ZIP")) {

    String st = parser.nextText();

    stb.append(st+";\n");

    }

    }

    parser.next();// 获取解析下一个事件

    }

    return stb.toString();

    }

    }

    二,散方法

    /**

        * 把毫秒转换成:1:20:30这里形式

        */

        public static String stringForTime(int timeMs) {

        // 转换成字符串的时间

            mFormatBuilder = new StringBuilder();

            mFormatter = new Formatter(mFormatBuilder, Locale.getDefault());

            int totalSeconds = timeMs / 1000;

            int seconds = totalSeconds % 60;

            int minutes = (totalSeconds / 60) % 60;

            int hours = totalSeconds / 3600;

            mFormatBuilder.setLength(0);

            if (hours > 0) {

                return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds) .toString();

            } else {

                return mFormatter.format("%02d:%02d", minutes, seconds).toString();

            }

        }

    /**

        * 得到网络速度

        * 每隔两秒调用一次

        */

        public static String getNetSpeed(Context context) {

            String netSpeed = "0 kb/s";

            long nowTotalRxBytes = TrafficStats.getUidRxBytes(context.getApplicationInfo().uid)==TrafficStats.UNSUPPORTED ? 0 :(TrafficStats.getTotalRxBytes()/1024);//转为KB;

            long nowTimeStamp = System.currentTimeMillis();

            long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换

            lastTimeStamp = nowTimeStamp;

            lastTotalRxBytes = nowTotalRxBytes;

            netSpeed  = String.valueOf(speed) + " kb/s";

            return  netSpeed;

        }

    /**

    * 复制文本到剪贴板

    * @param text

    */

    public static void copyToClipboard(String text){

    if(Build.VERSION.SDK_INT >= 11){

    ClipboardManager cbm = (ClipboardManager) mApplicationContent.getSystemService(Activity.CLIPBOARD_SERVICE);

    cbm.setPrimaryClip(ClipData.newPlainText(mApplicationContent.getPackageName(), text));

    }else {

    android.text.ClipboardManager cbm = (android.text.ClipboardManager) mApplicationContent.getSystemService(Activity.CLIPBOARD_SERVICE);

    cbm.setText(text);

    }

    }

    /**

    * 经纬度测距

    */

    public static double distance(double jingdu1, double weidu1, double jingdu2,  double weidu2) {

    double a, b, R; 

    R = 6378137; // 地球半径 

    weidu1 = weidu1 * Math.PI / 180.0;

    weidu2 = weidu2 * Math.PI / 180.0;

    a = weidu1 - weidu2; 

    b = (jingdu1 - jingdu2) * Math.PI / 180.0;

    double d; 

    double sa2, sb2; 

    sa2 = Math.sin(a / 2.0);

    sb2 = Math.sin(b / 2.0);

    d = 2 

    * R 

    * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(weidu1)

    * Math.cos(weidu2) * sb2 * sb2));

    return d; 

    }

    /**

    * 是否有网络

    */

    public static boolean isNetWorkAvilable() {

    ConnectivityManager connectivityManager = (ConnectivityManager) mApplicationContent

    .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();

    if (activeNetInfo == null || !activeNetInfo.isAvailable()) {

    return false;

    } else {

    return true;

    }

    }

    /**

    * 取APP版本号

    */

    public static int getAppVersionCode(){

    try {

    PackageManager mPackageManager = mApplicationContent.getPackageManager();

    PackageInfo _info = mPackageManager.getPackageInfo(mApplicationContent.getPackageName(),0);

    return _info.versionCode;

    } catch (NameNotFoundException e) {

    return 0;

    }

    }

    /**

    * 取APP版本名

    */

    public static String getAppVersionName(){

    try {

    PackageManager mPackageManager = mApplicationContent.getPackageManager();

    PackageInfo _info = mPackageManager.getPackageInfo(mApplicationContent.getPackageName(),0);

    return _info.versionName;

    } catch (NameNotFoundException e) {

    return null;

    }

    }

    /**

    * 读取asset文件,可使用

    */

    public static String getStringFromAssets(String fileName){

    try {

    InputStreamReader inputReader = new InputStreamReader(mApplicationContent.getResources().getAssets().open(fileName) );

    BufferedReader bufReader = new BufferedReader(inputReader);

    String line="";

    String Result="";

    while((line = bufReader.readLine()) != null)

    Result += line;

    return Result;

    } catch (Exception e) {

    e.printStackTrace();

    }

    return "";

    }

    /**

    * 打开软键盘

    */

    public static void openKeybord(EditText mEditText, Context mContext)

    {

    InputMethodManager imm = (InputMethodManager) mContext

    .getSystemService(Context.INPUT_METHOD_SERVICE);

    imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);

    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,

    InputMethodManager.HIDE_IMPLICIT_ONLY);

    }

    /**

    * 关闭软键盘

    */

    public static void closeKeybord(EditText mEditText, Context mContext)

    {

    InputMethodManager imm = (InputMethodManager) mContext

    .getSystemService(Context.INPUT_METHOD_SERVICE);

    imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);

    }

    三,尺寸

    /**

    * dp转px

    *

    */ 

    public static int dip2px(float dpValue) { 

    final float scale = mApplicationContent.getResources().getDisplayMetrics().density;

    return (int) (dpValue * scale + 0.5f); 

    }

    /**

    * px转dp

    */ 

    public static int px2dip(float pxValue) { 

    final float scale = mApplicationContent.getResources().getDisplayMetrics().density;

    return (int) (pxValue / scale + 0.5f); 

    }

    /**

    * 取屏幕宽度

    * @return

    */

    public static int getScreenWidth(){

    DisplayMetrics dm = mApplicationContent.getResources().getDisplayMetrics();

    return dm.widthPixels;

    }

    /**

    * 取屏幕高度

    * @return

    */

    public static int getScreenHeight(){

    DisplayMetrics dm = mApplicationContent.getResources().getDisplayMetrics();

    return dm.heightPixels-getStatusBarHeight();

    }

    /**

    * 取屏幕高度包含状态栏高度

    * @return

    */

    public static int getScreenHeightWithStatusBar(){

    DisplayMetrics dm = mApplicationContent.getResources().getDisplayMetrics();

    return dm.heightPixels;

    }

    /**

    * 取导航栏高度

    * @return

    */

    public static int getNavigationBarHeight() {

    int result = 0;

    int resourceId = mApplicationContent.getResources().getIdentifier("navigation_bar_height", "dimen", "android");

    if (resourceId > 0) {

    result = mApplicationContent.getResources().getDimensionPixelSize(resourceId);

    }

    return result;

    }

    /**

    * 取状态栏高度

    * @return

    */

    public static int getStatusBarHeight() {

    int result = 0;

    int resourceId = mApplicationContent.getResources().getIdentifier("status_bar_height", "dimen", "android");

    if (resourceId > 0) {

    result = mApplicationContent.getResources().getDimensionPixelSize(resourceId);

    }

    return result;

    }

        public static int getActionBarHeight() {

    int actionBarHeight = 0;

    final TypedValue tv = new TypedValue();

            if (mApplicationContent.getTheme()

                    .resolveAttribute(android.R.attr.actionBarSize, tv, true)) {

                actionBarHeight = TypedValue.complexToDimensionPixelSize(

    tv.data, mApplicationContent.getResources().getDisplayMetrics());

            }

    return actionBarHeight;

    }

    四,日期

    /**

    * 获取现在时间

    */

    public static String getNowDate() {

    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);

    Date date = new Date();

    return sf.format(date);

    }

    /**

    * 获取后一天

    */

    public static String getNextDateTime() {

    Calendar c = Calendar.getInstance();

    c.add(Calendar.DAY_OF_MONTH, 1);

    return new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(c

    .getTime());

    }

    /**

    * 获取前一天

    */

    public static String getDateOfLastDay() {

    Calendar c = Calendar.getInstance();

    c.add(Calendar.DAY_OF_MONTH, -1);

    return new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(c

    .getTime());

    }

    五,相机的原始使用

    protected void createDirs() throws IOException {

    if (Environment.getExternalStorageState().equals(

    android.os.Environment.MEDIA_MOUNTED)) {

    File file = new File(Constant.FILEPATH);

    if (!file.exists()) {

    file.mkdirs();

    }

    } else {

    Toast.makeText(activity, "SD卡不存在,请插入SD卡!", Toast.LENGTH_SHORT)

    .show();

    }

    }

    public void useCamera(int requestCode, String name) {

    this.requestCode = requestCode;

    String status = Environment.getExternalStorageState();

    if (status.equals(Environment.MEDIA_MOUNTED)) {

    try {

    createDirs();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    Toast.makeText(activity, "创建文件夹失败", Toast.LENGTH_LONG).show();

    }

    Intent intent = new Intent(

    android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    File tempFile = new File(Constant.FILEPATH + name);

    Uri photoUri = Uri.fromFile(tempFile);

    intent.putExtra(ImageColumns.ORIENTATION, 0);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);

    activity.startActivityForResult(intent, requestCode);

    } else {

    Toast.makeText(activity, "没有储存卡", Toast.LENGTH_LONG).show();

    }

    }

    六,ListView图片错乱处理

    主要是熟悉settag用法

    1,图片错位产生原因:

    使用listview或者recycleview时,这两个空间内部的复用机制,再加上异步获取图片。会导致图片显示错位。

    图片加载是异步任务,通过网络,访问服务器并拿到图片资源的时间是不定的,并且这个任务不在主线程中执行。

    在异步访问网络的过程中,listview或者recycleview可能已经滑动,原先的convertview被复用,且被复用的convertview理应显示另一张图片,但是刚好,之前的异步任务执行完成了,显示在控件上。导致图片错位。

    2,解决方法:

    给listview或者recycleview的item中显示图片的控件,设置标志,即tag(通常为这个控件应该显示的图片的url地址)

    viewHolder.iv_main.setTag(imgUrl); 

    从网络获取完图片后,需要判断,此时这个控件身上的标志(imgUrl),是否与从网络上获取的图片的地址一样???

    一样,才显示到控件上!!!

    public void onLoadingComplete(String imageUrl, View view, Bitmap bitmap) { 

                    if (viewHolder.iv_main.getTag() != null && imageUrl.equals(viewHolder.iv_main.getTag())) { 

                        bitmap = CommonUtils.scallXinDianBitmap(bitmap); 

                        viewHolder.iv_main.setImageBitmap(bitmap); 

                    } 

                }

    相关文章

      网友评论

          本文标题:常用方法整理

          本文链接:https://www.haomeiwen.com/subject/wijtzqtx.html