豆瓣学习 返回请求码的使用 覆写程序崩溃 提示信息等
1.在开发中用到了编辑好了日志后返回到上一页 上一页要刷新列表的需求 这个可以使用onactivityresult来实现 以前好像用过onresume来实现 这不是很好
首先是设置一个监听
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode==200){ startindex = 1; fillData(); if(requestCode==NEW_NOTE){ showToast("发表新日记成功,正在刷新页面"); }else if(requestCode==EDIT_NOTE){ showToast("更新日记成功,正在刷新页面"); } } }
然后在编辑activity中:
setResult(200);//设置返回码
finish();
新知识: 覆写崩溃的对话框 qq不会弹出崩溃对话框就是这么做的
需要实现一个handler 程序报错后会打印报错信息
package cn.itcast.crash; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.lang.Thread.UncaughtExceptionHandler; import java.lang.reflect.Field; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Build; public class MyCrashHandler implements UncaughtExceptionHandler { // 保证MyCrashHandler只有一个实例 // 2.提供一个静态的程序变量 private static MyCrashHandler myCrashHandler; private Context context; // 1.私有化构造方法 private MyCrashHandler() { } // 3.暴露出来一个静态的方法 获取myCrashHandler public static synchronized MyCrashHandler getInstance() { if (myCrashHandler == null) { myCrashHandler = new MyCrashHandler(); } return myCrashHandler; } public void init(Context context) { this.context = context; } // 程序发生异常的时候调用的方法 // try catch @Override public void uncaughtException(Thread thread, Throwable ex) { System.out.println("出现错误啦 哈哈"); StringBuilder sb = new StringBuilder(); // 1.获取当前应用程序的版本号. PackageManager pm = context.getPackageManager(); try { PackageInfo packinfo = pm.getPackageInfo(context.getPackageName(), 0); sb.append("程序的版本号为" + packinfo.versionName); sb.append("\n"); // 2.获取手机的硬件信息. Field[] fields = Build.class.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { // 暴力反射,获取私有的字段信息 fields[i].setAccessible(true); String name = fields[i].getName(); sb.append(name + " = "); String value = fields[i].get(null).toString(); sb.append(value); sb.append("\n"); } // 3.获取程序错误的堆栈信息 . StringWriter writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); ex.printStackTrace(printWriter); String result = writer.toString(); sb.append(result); System.out.println(sb.toString()); // 4.把错误信息 提交到服务器 } catch (Exception e) { e.printStackTrace(); } // 完成自杀的操作 android.os.Process.killProcess(android.os.Process.myPid()); } }
然后是myapp的代码
package cn.itcast.crash; import android.app.Application; public class MyApp extends Application { //在整个应用第一次被创建出来的时候 执行 // 在应用程序对应的进程 第一次创建出来的时候执行 @Override public void onCreate() { super.onCreate(); //把自定义的异常处理类设置 给主线程 MyCrashHandler myCrashHandler = MyCrashHandler.getInstance(); myCrashHandler.init(getApplicationContext()); Thread.currentThread().setUncaughtExceptionHandler(myCrashHandler); } }
主要在清单中标注这个app
<application android:name="MyApp" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".CrashActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
软件工程方面知识:在开发过程中会先开发java项目 或者testcase项目,用来测试接口等工作 等测试完成后在运用到应用中,当然我也是这么做的