整理android中十大快速開發框架

1、日志工具類L.java


```

package com.zhy.utils;???

import android.util.Log;???

/** * Log統一管理類 *?? *?? *?? */??

public class L??{???????

private L()??????{??????????

/* cannot be instantiated */??????????

throw new UnsupportedOperationException("cannot be instantiated");??????}???????

public static boolean isDebug = true;// 是否需要打印bug,可以在application的onCreate函數里面初始化??????

private static final String TAG = "way";????// 下面四個是默認tag的函數??????

public static void i(String msg)??????{??????????

if (isDebug)??????????????

Log.i(TAG, msg);??????

}???????

public static void d(String msg)??????{??????????

if (isDebug)??????????????

Log.d(TAG, msg);??????}???????

public static void e(String msg)??????{??????????

if (isDebug)??????????????

Log.e(TAG, msg);??????}???????

public static void v(String msg)??????{??????????

if (isDebug)??????????????

Log.v(TAG, msg);??????}?? // 下面是傳入自定義tag的函數??????

public static void i(String tag, String msg)??????{??????????

if (isDebug)??????????????Log.i(tag, msg);??????}???????

public static void d(String tag, String msg)??????{??????????

if (isDebug)??????????????Log.i(tag, msg);??????}???????

public static void e(String tag, String msg)??????{??????????

if (isDebug)??????????????Log.i(tag, msg);??????}??????

?public static void v(String tag, String msg)??????{??????????

if (isDebug)??????????????Log.i(tag, msg);??????}??}?

```


? ?? ?

2、Toast統一管理類?


···

package com.zhy.utils;???

import android.content.Context;??

import android.widget.Toast;???/** * Toast統一管理類 *?? */??public class T??{???????

private T()??????{?????????

?/** cannot be instantiated**/??????????

throw new UnsupportedOperationException("cannot be instantiated");??????}???????

public static boolean isShow = true;?? /** ???? * 短時間顯示Toast ???? *?????? * @param context ???? * @param message ???? */??????

public static void showShort(Context context, CharSequence message)??????{??????????

if (isShow)??????????????

Toast.makeText(context, message, Toast.LENGTH_SHORT).show();??????}???????/** ???? * 短時間顯示Toast ???? *?????? * @param context ???? * @param message ???? */??????

public static void showShort(Context context, int message)??????{??????????

if (isShow)??????????????

Toast.makeText(context, message, Toast.LENGTH_SHORT).show();??????}??????/** ???? * 長時間顯示Toast ???? *?????? * @param context ???? * @param message ???? */??????

public static void showLong(Context context, CharSequence message)??????{??????????

if (isShow)??????????????

Toast.makeText(context, message, Toast.LENGTH_LONG).show();??????}???????/** ???? * 長時間顯示Toast ???? *?????? * @param context ???? * @param message ???? */??????

public static void showLong(Context context, int message)??????{??????????

if (isShow)??????????????

Toast.makeText(context, message, Toast.LENGTH_LONG).show();??????}??????/** ???? * 自定義顯示Toast時間 ???? *?????? * @param context ???? * @param message ???? * @param duration ???? */??????

public static void show(Context context, CharSequence message, int duration)??????{??????????

if (isShow)??????????????

Toast.makeText(context, message, duration).show();??????}???????/** ???? * 自定義顯示Toast時間 ???? *?????? * @param context ???? * @param message ???? * @param duration ???? */??????

public static void show(Context context, int message, int duration)??????{??????????

if (isShow)??????????????

Toast.makeText(context, message, duration).show();??????}???}


```

3、SharedPreferences封裝類SPUtils

```

package com.zhy.utils;??


import java.lang.reflect.InvocationTargetException;??

import java.lang.reflect.Method;??

import java.util.Map;??


import android.content.Context;??

import android.content.SharedPreferences;??


public class SPUtils??

{??

????/**

???? * 保存在手機里面的文件名

???? */??

????public static final String FILE_NAME = "share_data";??


????/**

???? * 保存數據的方法,我們需要拿到保存數據的具體類型,然后根據類型調用不同的保存方法

???? *??

???? * @param context

???? * @param key

???? * @param object

???? */??

????public static void put(Context context, String key, Object object)??

????{??


????????SharedPreferences sp = context.getSharedPreferences(FILE_NAME,??

????????????????Context.MODE_PRIVATE);??

????????SharedPreferences.Editor editor = sp.edit();??


????????if (object instanceof String)??

????????{??

????????????editor.putString(key, (String) object);??

????????} else if (object instanceof Integer)??

????????{??

????????????editor.putInt(key, (Integer) object);??

????????} else if (object instanceof Boolean)??

????????{??

????????????editor.putBoolean(key, (Boolean) object);??

????????} else if (object instanceof Float)??

????????{??

????????????editor.putFloat(key, (Float) object);??

????????} else if (object instanceof Long)??

????????{??

????????????editor.putLong(key, (Long) object);??

????????} else??

????????{??

????????????editor.putString(key, object.toString());??

????????}??


????????SharedPreferencesCompat.apply(editor);??

????}??

????/**

???? * 得到保存數據的方法,我們根據默認值得到保存的數據的具體類型,然后調用相對于的方法獲取值

???? *??

???? * @param context

???? * @param key

???? * @param defaultObject

???? * @return

???? */??

????public static Object get(Context context, String key, Object defaultObject)??

????{??

????????SharedPreferences sp = context.getSharedPreferences(FILE_NAME,??

????????????????Context.MODE_PRIVATE);??


????????if (defaultObject instanceof String)??

????????{??

????????????return sp.getString(key, (String) defaultObject);??

????????} else if (defaultObject instanceof Integer)??

????????{??

????????????return sp.getInt(key, (Integer) defaultObject);??

????????} else if (defaultObject instanceof Boolean)??

????????{??

????????????return sp.getBoolean(key, (Boolean) defaultObject);??

????????} else if (defaultObject instanceof Float)??

????????{??

????????????return sp.getFloat(key, (Float) defaultObject);??

????????} else if (defaultObject instanceof Long)??

????????{??

????????????return sp.getLong(key, (Long) defaultObject);??

????????}??


????????return null;??

????}??

????/**

???? * 移除某個key值已經對應的值

???? * @param context

???? * @param key

???? */??

????public static void remove(Context context, String key)??

????{??

????????SharedPreferences sp = context.getSharedPreferences(FILE_NAME,??

????????????????Context.MODE_PRIVATE);??

????????SharedPreferences.Editor editor = sp.edit();??

????????editor.remove(key);??

????????SharedPreferencesCompat.apply(editor);??

????}??


????/**

???? * 清除所有數據

???? * @param context

???? */??

????public static void clear(Context context)??

????{??

????????SharedPreferences sp = context.getSharedPreferences(FILE_NAME,??

????????????????Context.MODE_PRIVATE);??

????????SharedPreferences.Editor editor = sp.edit();??

????????editor.clear();??

????????SharedPreferencesCompat.apply(editor);??

????}??


????/**

???? * 查詢某個key是否已經存在

???? * @param context

???? * @param key

???? * @return

???? */??

????public static boolean contains(Context context, String key)??

????{??

????????SharedPreferences sp = context.getSharedPreferences(FILE_NAME,??

????????????????Context.MODE_PRIVATE);??

????????return sp.contains(key);??

????}??

????/**

???? * 返回所有的鍵值對

???? *??

???? * @param context

???? * @return

???? */??

????public static Map getAll(Context context)??

????{??

????????SharedPreferences sp = context.getSharedPreferences(FILE_NAME,??

????????????????Context.MODE_PRIVATE);??

????????return sp.getAll();??

????}??


????/**

???? * 創建一個解決SharedPreferencesCompat.apply方法的一個兼容類

???? *??

???? * @author zhy

???? *??

???? */??

????private static class SharedPreferencesCompat??

????{??

????????private static final Method sApplyMethod = findApplyMethod();??


????????/**

???????? * 反射查找apply的方法

???????? *??

???????? * @return

???????? */??

????????@SuppressWarnings({ "unchecked", "rawtypes" })??

????????private static Method findApplyMethod()??

????????{??

????????????try??

????????????{??

????????????????Class clz = SharedPreferences.Editor.class;??

????????????????return clz.getMethod("apply");??

????????????} catch (NoSuchMethodException e)??

????????????{??

????????????}??


????????????return null;??

????????}??

????????/**

???????? * 如果找到則使用apply執行,否則使用commit

???????? *??

???????? * @param editor

???????? */??

????????public static void apply(SharedPreferences.Editor editor)??

????????{??

????????????try??

????????????{??

????????????????if (sApplyMethod != null)??

????????????????{??

????????????????????sApplyMethod.invoke(editor);??

????????????????????return;??

????????????????}??

????????????} catch (IllegalArgumentException e)??

????????????{??

????????????} catch (IllegalAccessException e)??

????????????{??

????????????} catch (InvocationTargetException e)??

????????????{??

????????????}??

????????????editor.commit();??

????????}??

????}??


}

```

對SharedPreference的使用做了建議的封裝,對外公布出put,get,remove,clear等等方法;

注意一點,里面所有的commit操作使用了SharedPreferencesCompat.apply進行了替代,目的是盡可能的使用apply代替commit

首先說下為什么,因為commit方法是同步的,并且我們很多時候的commit操作都是UI線程中,畢竟是IO操作,盡可能異步;

所以我們使用apply進行替代,apply異步的進行寫入;

但是apply相當于commit來說是new API呢,為了更好的兼容,我們做了適配;

SharedPreferencesCompat也可以給大家創建兼容類提供了一定的參考~~

4、單位轉換類?DensityUtils


```

?package com.zhy.utils;??


????import android.content.Context;??

????import android.util.TypedValue;??


????/**

???? * 常用單位轉換的輔助類

???? *??

???? *??

???? *??

???? */??

????public class DensityUtils??

????{??

????????private DensityUtils()??

????????{??

????????????/** cannot be instantiated **/??

????????????throw new UnsupportedOperationException("cannot be instantiated");??

????????}??


????????/**

???????? * dp轉px

???????? *??

???????? * @param context

???????? * @param val

???????? * @return

???????? */

???????? public static int dp2px(Context context, float dpVal)??

????????????{??

????????????????return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,??

????????????????????????dpVal, context.getResources().getDisplayMetrics());??

????????????}??


????????????/**

???????????? * sp轉px

???????????? *??

???????????? * @param context

???????????? * @param val

???????????? * @return

???????????? */??

????????????public static int sp2px(Context context, float spVal)??

????????????{??

????????????????return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,??

????????????????????????spVal, context.getResources().getDisplayMetrics());??

????????????}??


????????????/**

???????????? * px轉dp

???????????? *??

???????????? * @param context

???????????? * @param pxVal

???????????? * @return

???????????? */??

????????????public static float px2dp(Context context, float pxVal)??

????????????{??

????????????????final float scale = context.getResources().getDisplayMetrics().density;??

????????????????return (pxVal / scale);??

????????????}

????????????????/**

???????????????? * px轉sp

???????????????? *??

???????????????? * @param fontScale

???????????????? * @param pxVal

???????????????? * @return

???????????????? */??

????????????????public static float px2sp(Context context, float pxVal)??

????????????????{??

????????????????????return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);??

????????????????}??


????????????}

```

5、SD卡相關輔助類?SDCardUtils


```

package com.zhy.utils;??


import java.io.File;??


import android.os.Environment;??

import android.os.StatFs;??


/**

* SD卡相關的輔助類

*??

*??

*??

*/??

public class SDCardUtils??

{??

????private SDCardUtils()??

????{??

????????/** cannot be instantiated **/??

????????throw new UnsupportedOperationException("cannot be instantiated");??

????}??


????/**

???? * 判斷SDCard是否可用

???? *??

???? * @return

???? */??

????public static boolean isSDCardEnable()??

????{??

????????return Environment.getExternalStorageState().equals(??

????????????????Environment.MEDIA_MOUNTED);??


????}??


????/**

???? * 獲取SD卡路徑

???? *??

???? * @return

???? */??

????public static String getSDCardPath()??

????{??

????????return Environment.getExternalStorageDirectory().getAbsolutePath()??

????????????????+ File.separator;??

????}??


????/**

???? * 獲取SD卡的剩余容量 單位byte

???? *??

???? * @return

???? */??

????public static long getSDCardAllSize()??

????{??

????????if (isSDCardEnable())??

????????{??

????????????StatFs stat = new StatFs(getSDCardPath());??

????????????// 獲取空閑的數據塊的數量??

????????????long availableBlocks = (long) stat.getAvailableBlocks() - 4;??

????????????// 獲取單個數據塊的大小(byte)??

????????????long freeBlocks = stat.getAvailableBlocks();??

????????????return freeBlocks * availableBlocks;??

????????}??

????????return 0;??

????}??


????/**

???? * 獲取指定路徑所在空間的剩余可用容量字節數,單位byte

???? *??

???? * @param filePath

???? * @return 容量字節 SDCard可用空間,內部存儲可用空間

???? */??

????public static long getFreeBytes(String filePath)??

????{??

????????// 如果是sd卡的下的路徑,則獲取sd卡可用容量??

????????if (filePath.startsWith(getSDCardPath()))??

????????{??

????????????filePath = getSDCardPath();??

????????} else??

????????{// 如果是內部存儲的路徑,則獲取內存存儲的可用容量??

????????????filePath = Environment.getDataDirectory().getAbsolutePath();??

????????}??

????????StatFs stat = new StatFs(filePath);??

????????long availableBlocks = (long) stat.getAvailableBlocks() - 4;??

????????return stat.getBlockSize() * availableBlocks;??

????}??


????/**

???? * 獲取系統存儲路徑

???? *??

???? * @return

???? */??

????public static String getRootDirectoryPath()??

????{??

????????return Environment.getRootDirectory().getAbsolutePath();??

????}??


}

```

6、屏幕相關輔助類?ScreenUtils


```

?package com.zhy.utils;??


????import android.app.Activity;??

????import android.content.Context;??

????import android.graphics.Bitmap;??

????import android.graphics.Rect;??

????import android.util.DisplayMetrics;??

????import android.view.View;??

????import android.view.WindowManager;??


????/**

???? * 獲得屏幕相關的輔助類

???? *??

???? *??

???? *??

???? */??

????public class ScreenUtils??

????{??

????????private ScreenUtils()??

????????{??

????????????/** cannot be instantiated **/??

????????????throw new UnsupportedOperationException("cannot be instantiated");??

????????}??


????????/**

???????? * 獲得屏幕高度

???????? *??

???????? * @param context

???????? * @return

???????? */??

????????public static int getScreenWidth(Context context)??

????????{??

????????????WindowManager wm = (WindowManager) context??

????????????????????.getSystemService(Context.WINDOW_SERVICE);??

????????????DisplayMetrics outMetrics = new DisplayMetrics();??

????????????wm.getDefaultDisplay().getMetrics(outMetrics);??

????????????return outMetrics.widthPixels;??

????????}??


????????/**

???????? * 獲得屏幕寬度

???????? *??

???????? * @param context

???????? * @return

???????? */??

????????public static int getScreenHeight(Context context)??

????????{??

????????????WindowManager wm = (WindowManager) context??

????????????????????.getSystemService(Context.WINDOW_SERVICE);??

????????????DisplayMetrics outMetrics = new DisplayMetrics();??

????????????wm.getDefaultDisplay().getMetrics(outMetrics);??

????????????return outMetrics.heightPixels;??

????????}??


????????/**

???????? * 獲得狀態欄的高度

???????? *??

???????? * @param context

???????? * @return

???????? */??

????????public static int getStatusHeight(Context context)??

????????{??


????????????int statusHeight = -1;??

????????????try??

????????????{??

????????????????Class clazz = Class.forName("com.android.internal.R$dimen");??

????????????????Object object = clazz.newInstance();??

????????????????int height = Integer.parseInt(clazz.getField("status_bar_height")??

????????????????????????.get(object).toString());??

????????????????statusHeight = context.getResources().getDimensionPixelSize(height);??

????????????} catch (Exception e)??

????????????{??

????????????????e.printStackTrace();??

????????????}??

????????????return statusHeight;??

????????}??


????????/**

???????? * 獲取當前屏幕截圖,包含狀態欄

???????? *??

???????? * @param activity

???????? * @return

???????? */??

????????public static Bitmap snapShotWithStatusBar(Activity activity)??

????????{??

????????????View view = activity.getWindow().getDecorView();??

????????????view.setDrawingCacheEnabled(true);??

????????????view.buildDrawingCache();??

????????????Bitmap bmp = view.getDrawingCache();??

????????????int width = getScreenWidth(activity);??

????????????int height = getScreenHeight(activity);??

????????????Bitmap bp = null;??

????????????bp = Bitmap.createBitmap(bmp, 0, 0, width, height);??

????????????view.destroyDrawingCache();??

????????????return bp;??


????????}??


????????/**

???????? * 獲取當前屏幕截圖,不包含狀態欄

???????? *??

???????? * @param activity

???????? * @return

???????? */??

????????public static Bitmap snapShotWithoutStatusBar(Activity activity)??

????????{??

????????????View view = activity.getWindow().getDecorView();??

????????????view.setDrawingCacheEnabled(true);??

????????????view.buildDrawingCache();??

????????????Bitmap bmp = view.getDrawingCache();??

????????????Rect frame = new Rect();??

????????????activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);??

????????????int statusBarHeight = frame.top;??


????????????int width = getScreenWidth(activity);??

????????????int height = getScreenHeight(activity);??

????????????Bitmap bp = null;??

????????????bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height??

????????????????????- statusBarHeight);??

????????????view.destroyDrawingCache();??

????????????return bp;??


????????}??


????}

```

7、App相關輔助類


```

?package com.zhy.utils;??


????import android.content.Context;??

????import android.content.pm.PackageInfo;??

????import android.content.pm.PackageManager;??

????import android.content.pm.PackageManager.NameNotFoundException;??


????/**

???? * 跟App相關的輔助類

???? *??

???? *??

???? *??

???? */??

????public class AppUtils??

????{??


????????private AppUtils()??

????????{??

????????????/**cannot be instantiated **/??

????????????throw new UnsupportedOperationException("cannot be instantiated");??


????????}??


????????/**

???????? * 獲取應用程序名稱

???????? */??

????????public static String getAppName(Context context)??

????????{??

????????????try??

????????????{??

????????????????PackageManager packageManager = context.getPackageManager();??

????????????????PackageInfo packageInfo = packageManager.getPackageInfo(??

????????????????????????context.getPackageName(), 0);??

????????????????int labelRes = packageInfo.applicationInfo.labelRes;??

????????????????return context.getResources().getString(labelRes);??

????????????} catch (NameNotFoundException e)??

????????????{??

????????????????e.printStackTrace();??

????????????}??

????????????return null;??

????????}??


????????/**

???????? * [獲取應用程序版本名稱信息]

???????? *??

???????? * @param context

???????? * @return 當前應用的版本名稱

???????? */??

????????public static String getVersionName(Context context)??

????????{??

????????????try??

????????????{??

????????????????PackageManager packageManager = context.getPackageManager();??

????????????????PackageInfo packageInfo = packageManager.getPackageInfo(??

????????????????????????context.getPackageName(), 0);??

????????????????return packageInfo.versionName;??


????????????} catch (NameNotFoundException e)??

????????????{??

????????????????e.printStackTrace();??

????????????}??

????????????return null;??

????????}??


????}

```

8、軟鍵盤相關輔助類KeyBoardUtils

```

package com.zhy.utils;??


????import android.content.Context;??

????import android.view.inputmethod.InputMethodManager;??

????import android.widget.EditText;??


????/**

???? * 打開或關閉軟鍵盤

???? *??

???? * @author zhy

???? *??

???? */??

????public class KeyBoardUtils??

????{??

????????/**

???????? * 打卡軟鍵盤

???????? *??

???????? * @param mEditText

???????? *????????????輸入框

???????? * @param mContext

???????? *????????????上下文

???????? */??

????????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);??

????????}??


????????/**

???????? * 關閉軟鍵盤

???????? *??

???????? * @param mEditText

???????? *????????????輸入框

???????? * @param mContext

???????? *????????????上下文

???????? */??

????????public static void closeKeybord(EditText mEditText, Context mContext)??

????????{??

????????????InputMethodManager imm = (InputMethodManager) mContext??

????????????????????.getSystemService(Context.INPUT_METHOD_SERVICE);??


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

????????}??

????}

```

9、網絡相關輔助類?NetUtils

```

?package com.zhy.utils;??


????import android.app.Activity;??

????import android.content.ComponentName;??

????import android.content.Context;??

????import android.content.Intent;??

????import android.net.ConnectivityManager;??

????import android.net.NetworkInfo;??


????/**

???? * 跟網絡相關的工具類

???? *??

???? *??

???? *??

???? */??

????public class NetUtils??

????{??

????????private NetUtils()??

????????{??

????????????/** cannot be instantiated **/??

????????????throw new UnsupportedOperationException("cannot be instantiated");??

????????}??


????????/**

???????? * 判斷網絡是否連接

???????? *??

???????? * @param context

???????? * @return

???????? */??

????????public static boolean isConnected(Context context)??

????????{??


????????????ConnectivityManager connectivity = (ConnectivityManager) context??

????????????????????.getSystemService(Context.CONNECTIVITY_SERVICE);??


????????????if (null != connectivity)??

????????????{??


????????????????NetworkInfo info = connectivity.getActiveNetworkInfo();??

????????????????if (null != info && info.isConnected())??

????????????????{??

????????????????????if (info.getState() == NetworkInfo.State.CONNECTED)??

????????????????????{??

????????????????????????return true;??

????????????????????}??

????????????????}??

????????????}??

????????????return false;??

????????}??


????????/**

???????? * 判斷是否是wifi連接

???????? */??

????????public static boolean isWifi(Context context)??

????????{??

????????????ConnectivityManager cm = (ConnectivityManager) context??

????????????????????.getSystemService(Context.CONNECTIVITY_SERVICE);??


????????????if (cm == null)??

????????????????return false;??

????????????return cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;??


????????}??


????????/**

???????? * 打開網絡設置界面

???????? */??

????????public static void openSetting(Activity activity)??

????????{??

????????????Intent intent = new Intent("/");??

????????????ComponentName cm = new ComponentName("com.android.settings",??

????????????????????"com.android.settings.WirelessSettings");??

????????????intent.setComponent(cm);??

????????????intent.setAction("android.intent.action.VIEW");??

????????????activity.startActivityForResult(intent, 0);??

????????}??


????}

```

10、Http相關輔助類?HttpUtils


```

package com.zhy.utils;??


????import java.io.BufferedReader;??

????import java.io.ByteArrayOutputStream;??

????import java.io.IOException;??

????import java.io.InputStream;??

????import java.io.InputStreamReader;??

????import java.io.PrintWriter;??

????import java.net.HttpURLConnection;??

????import java.net.URL;??


????/**

???? * Http請求的工具類

???? *??

???? * @author zhy

???? *??

???? */??

????public class HttpUtils??

????{??


????????private static final int TIMEOUT_IN_MILLIONS = 5000;??


????????public interface CallBack??

????????{??

????????????void onRequestComplete(String result);??

????????}??


????????/**

???????? * 異步的Get請求

???????? *??

???????? * @param urlStr

???????? * @param callBack

???????? */??

????????public static void doGetAsyn(final String urlStr, final CallBack callBack)??

????????{??

????????????new Thread()??

????????????{??

????????????????public void run()??

????????????????{??

????????????????????try??

????????????????????{??

????????????????????????String result = doGet(urlStr);??

????????????????????????if (callBack != null)??

????????????????????????{??

????????????????????????????callBack.onRequestComplete(result);??

????????????????????????}??

????????????????????} catch (Exception e)??

????????????????????{??

????????????????????????e.printStackTrace();??

????????????????????}??


????????????????};??

????????????}.start();??

????????}??


????????/**

???????? * 異步的Post請求

???????? * @param urlStr

???????? * @param params

???????? * @param callBack

???????? * @throws Exception

???????? */??

????????public static void doPostAsyn(final String urlStr, final String params,??

????????????????final CallBack callBack) throws Exception??

????????{??

????????????new Thread()??

????????????{??

????????????????public void run()??

????????????????{??

????????????????????try??

????????????????????{??

????????????????????????String result = doPost(urlStr, params);??

????????????????????????if (callBack != null)??

????????????????????????{??

????????????????????????????callBack.onRequestComplete(result);??

????????????????????????}??

????????????????????} catch (Exception e)??

????????????????????{??

????????????????????????e.printStackTrace();??

????????????????????}??


????????????????};??

????????????}.start();??


????????}??


????????/**

???????? * Get請求,獲得返回數據

???????? *??

???????? * @param urlStr

???????? * @return

???????? * @throws Exception

???????? */??

????????public static String doGet(String urlStr)??

????????{??

????????????URL url = null;??

????????????HttpURLConnection conn = null;??

????????????InputStream is = null;??

????????????ByteArrayOutputStream baos = null;??

????????????try??

????????????{??

????????????????url = new URL(urlStr);??

????????????????conn = (HttpURLConnection) url.openConnection();??

????????????????conn.setReadTimeout(TIMEOUT_IN_MILLIONS);??

????????????????conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);??

????????????????conn.setRequestMethod("GET");??

????????????????conn.setRequestProperty("accept", "*/*");??

????????????????conn.setRequestProperty("connection", "Keep-Alive");??

????????????????if (conn.getResponseCode() == 200)??

????????????????{??

????????????????????is = conn.getInputStream();??

????????????????????baos = new ByteArrayOutputStream();??

????????????????????int len = -1;??

????????????????????byte[] buf = new byte[128];??


????????????????????while ((len = is.read(buf)) != -1)??

????????????????????{??

????????????????????????baos.write(buf, 0, len);??

????????????????????}??

????????????????????baos.flush();??

????????????????????return baos.toString();??

????????????????} else??

????????????????{??

????????????????????throw new RuntimeException(" responseCode is not 200 ... ");??

????????????????}??


????????????} catch (Exception e)??

????????????{??

????????????????e.printStackTrace();??

????????????} finally??

????????????{??

????????????????try??

????????????????{??

????????????????????if (is != null)??

????????????????????????is.close();??

????????????????} catch (IOException e)??

????????????????{??

????????????????}??

????????????????try??

????????????????{??

????????????????????if (baos != null)??

????????????????????????baos.close();??

????????????????} catch (IOException e)??

????????????????{??

????????????????}??

????????????????conn.disconnect();??

????????????}??


????????????return null ;??


????????}??


????????/**??

???????? * 向指定 URL 發送POST方法的請求??

???????? *??

???????? * @param url??

???????? *????????????發送請求的 URL??

???????? * @param param??

???????? *????????????請求參數,請求參數應該是 name1=value1&name2=value2 的形式。??

???????? * @return 所代表遠程資源的響應結果??

???????? * @throws Exception??

???????? */??

????????public static String doPost(String url, String param)??

????????{??

????????????PrintWriter out = null;??

????????????BufferedReader in = null;??

????????????String result = "";??

????????????try??

????????????{??

????????????????URL realUrl = new URL(url);??

????????????????// 打開和URL之間的連接??

????????????????HttpURLConnection conn = (HttpURLConnection) realUrl??

????????????????????????.openConnection();??

????????????????// 設置通用的請求屬性??

????????????????conn.setRequestProperty("accept", "*/*");??

????????????????conn.setRequestProperty("connection", "Keep-Alive");??

????????????????conn.setRequestMethod("POST");??

????????????????conn.setRequestProperty("Content-Type",??

????????????????????????"application/x-www-form-urlencoded");??

????????????????conn.setRequestProperty("charset", "utf-8");??

????????????????conn.setUseCaches(false);??

????????????????// 發送POST請求必須設置如下兩行??

????????????????conn.setDoOutput(true);??

????????????????conn.setDoInput(true);??

????????????????conn.setReadTimeout(TIMEOUT_IN_MILLIONS);??

????????????????conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);??


????????????????if (param != null && !param.trim().equals(""))??

????????????????{??

????????????????????// 獲取URLConnection對象對應的輸出流??

????????????????????out = new PrintWriter(conn.getOutputStream());??

????????????????????// 發送請求參數??

????????????????????out.print(param);??

????????????????????// flush輸出流的緩沖??

????????????????????out.flush();??

????????????????}??

????????????????// 定義BufferedReader輸入流來讀取URL的響應??

????????????????in = new BufferedReader(??

????????????????????????new InputStreamReader(conn.getInputStream()));??

????????????????String line;??

????????????????while ((line = in.readLine()) != null)??

????????????????{??

????????????????????result += line;??

????????????????}??

????????????} catch (Exception e)??

????????????{??

????????????????e.printStackTrace();??

????????????}??

????????????// 使用finally塊來關閉輸出流、輸入流??

????????????finally??

????????????{??

????????????????try??

????????????????{??

????????????????????if (out != null)??

????????????????????{??

????????????????????????out.close();??

????????????????????}??

????????????????????if (in != null)??

????????????????????{??

????????????????????????in.close();??

????????????????????}??

????????????????} catch (IOException ex)??

????????????????{??

????????????????????ex.printStackTrace();??

????????????????}??

????????????}??

????????????return result;??

????????}??

????}

```

如果有錯誤歡迎留言,共同改進優化,后續會更新更多的工具類

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容