豆瓣学习 返回请求码的使用 覆写程序崩溃 提示信息等

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项目,用来测试接口等工作 等测试完成后在运用到应用中,当然我也是这么做的


posted @ 2012-11-25 21:09  sfshine  阅读(172)  评论(0编辑  收藏  举报