美文网首页
常用方法整理

常用方法整理

作者: 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); 

                } 

            }

相关文章

  • 常用方法整理

    均属于笔记,仅供个人参考,有问题欢迎指正 一,Xml文件解析,现在已经用的很少了,基本都是json 三,尺寸 四,...

  • Java EE 第五篇 核心类库(二)常用类库

    要求:熟悉常用类库的使用,整理常用方法。 一、objects类 示例方法: equals()public stat...

  • 常用JS方法整理

    原文链接目录: 截取指定字节数的字符串 判断是否微信 获取时间格式的几个举例 获取字符串字节长度 对象克隆、深拷贝...

  • 常用JS方法整理

    https://juejin.im/post/5b62d02ee51d453467552dc9#heading-10

  • php 常用方法整理

    基本知识 1、引用php语言中有引用的概念,相当于指针。如$a = &$b 2、运算符优先级(new) > (++...

  • js常用方法整理

    数组操作 页面跳转 遍历对象 json与字符串互转 弹出框 取整 时间操作 字符串截取 判断数据类型 延时回调传参

  • UIView常用方法整理

    自定义UIView可实现上述方法用于初始化。 当UIView从xib或者storyboard中创建之前调用。 当U...

  • JS常用方法整理

    JS常用方法整理 一、日期相关 1.二个日期之间相差天数 2.返回日期 3.获取星期几 二、字符相关 1.JS获取...

  • vue常用方法整理

    created:html加载完成之前,执行。执行顺序:父组件-子组件 mounted:html加载完成后执行。执行...

  • lyjutils.js javascript 工具类

    收集整理的常用js,部分方法依赖jquery

网友评论

      本文标题:常用方法整理

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