android上传图片到服务器抛出异常,[Android]Android apk崩溃捕获异常保存到本地或上传到服务器20160724...

看了艺术探索学习到的知识,大神不要喷,

记得加android.permission.WRITE_EXTERNAL_STORAGE权限

要在application里初始化

CrashHandler handler = CrashHandler.getInstance();

handler.init(this);

代码:

import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.lang.Thread.UncaughtExceptionHandler; import java.text.SimpleDateFormat; import java.util.Date; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Build; import android.os.Environment; import android.util.Log; public class CrashHandler implements UncaughtExceptionHandler { private static final String TAG = "CrashHandler"; private static final boolean DEBUG = true; private static final String PATH = Environment.getExternalStorageDirectory().getPath()+"/exceptionCatch/log/"; private static final String FILE_NAME = "catch"; private static final String FLIE_NAME_SUFFIX = ".log"; private static CrashHandler sInstance = new CrashHandler(); private UncaughtExceptionHandler mDefaultCrashHandler; private Context mContext; public CrashHandler() { } public static CrashHandler getInstance(){ Log.d(TAG, "get crash instance."); if(sInstance == null){ sInstance = new CrashHandler(); } return sInstance; } public void init(Context context){ Log.d(TAG, "init UncaughtExceptionnHandler"); mDefaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); mContext = context.getApplicationContext(); } /** * 程序崩溃会调用该方法 */ @Override public void uncaughtException(Thread thread, Throwable ex) { try{ Log.d(TAG, "uncaughtException ..."); dumpExceptionToSDCard(ex); // uploadExceptionToServer(ex);  需要把异常上传到服务器,编写逻辑 解除该行注释 }catch(IOException e){ e.printStackTrace(); } } private void dumpExceptionToSDCard(final Throwable ex) throws IOException{ if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ if(DEBUG){ Log.w(TAG, "sdcard unmounted,skip dump exception"); return; } } File dir = new File(PATH); if(!dir.exists()){ Log.d(TAG, "log dir not exists. ready create"); dir.mkdirs(); } long current = System.currentTimeMillis(); final String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(current)); final File file = new File(PATH + FILE_NAME + FLIE_NAME_SUFFIX); new Thread(new Runnable() { @Override public void run() { try{ PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); pw.println(time); dumpPhoneInfo(pw,ex); pw.close(); }catch(Exception e){ Log.e(TAG, "dump crash info failed : " + Log.getStackTraceString(e)); } } }).start(); } private void dumpPhoneInfo(PrintWriter pw, Throwable ex)throws NameNotFoundException { Log.d(TAG, "dumpPhoneInfo ... start"); PackageManager pm = mContext.getPackageManager(); PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(),PackageManager.GET_ACTIVITIES); pw.print("App version: "); pw.print(pi.versionName); pw.print('_'); pw.println(pi.versionCode); //Android版本号 pw.print("OS Version: "); pw.print(Build.VERSION.RELEASE); pw.print(" _ sdk: "); pw.println(Build.VERSION.SDK_INT); //手机制造商 pw.print("Vendor: "); pw.println(Build.MANUFACTURER); //手机型号 pw.print("Model: "); pw.println(Build.MODEL); //CPU架构 pw.print("CPU ABI : "); pw.println(Build.CPU_ABI); pw.println(); //异常信息 ex.printStackTrace(pw); } private void uploadExceptionToServer(Throwable ex){ //上传到服务器逻辑代码 } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值