日积月累--exception记录

关于Android的sqlite数据类型text长度限制的问题?

这也许不能称为一个bug,但是比较坑,所以贴在了这里。在Android的sqlite中存储一个字符串,发现总是数据丢失,我去查询sqlite官方的数据类型text长度很大,能满足我的要求,但是为什么Android中的sqlite就满足不了了呢!导出查看db文件,发现字符长度只有8192个字符,显然数据是丢失了。暂且记录在这里。还有一点需要说明的是rom为flyme5.0。

[2017年2月6日15:14:47]

Android 中有关继承Fragment的一些错误

解决方案:http://blog.sina.com.cn/s/blog_c58a37cb0102vibh.html

[2017年1月16日17:25:03]

java.lang.NullPointerException (no error message)

解决方案:http://stackoverflow.com/questions/39183674/java-lang-nullpointerexception-no-error-message

[2017年1月14日10:36:22]

Error:error: File is case-insensitive equivalent to: \app\build\intermxxxxxxxxxxxxxxxx

解决方案:Android res文件夹下的所有文件不能有大写字符,如果出现大写字符会导致R.java无法生成

Android项目是的R文件是由系统生成的资源的定义,如果出同冲突,错误,那么android 无法生成R文件 ,即使有时候你xml文件没有错误,他都无法生成。针对此问题,总结以下几个方面的原因:

  1. xml本身有错误

    R.java这个文件是会自动生成的,但是如果你不小心xml文件写错了,或者不小心在编辑xml的时候点击了run(其实这个时候会运行这个xml文件,会生成一个同名的xml文件,后缀为xx.out.xml),然后正巧你游clear了一下项目,你可能会发现gen下面的R.java的文件没有了,这个在刚开始的时候很气人,真不知道怎么解决,后来发现,只要xml文件有问题,系统是绝对不会给你自动生成这个R.java文件,因为他要参照你的每张xml里的数据来生成R.java,所以自然就生成不了了。虽然知道了原因但是问题头疼,假如项目的layout

    xml文件有几十个,这个时候怎么办,难道要一个一个xml的看吗,呵呵,其实也不是,把console中的信息clear一下,然后再clear项目一下,这个时候,console中会有很多红色的信息,参照这个肯定能准确的找到哪个文件报错了。

    下面这个事误运行了xml文件,可以看到gen的包不是空的,R.java文件也存在,并且明确的支出了是layout包中的错误

  2. 编码格式不正确

    有时候由于编码格式问题,造成无法生成R文件,此时后,把编码格式变成GBK或者UTF–8即可

  3. 配置问题,转义字符的问题

    因为XML有些特殊字符需要转义,例如”<>&;”’ “等

[2016-9-22 17:53:35]

Error:Execution
failed for task ‘:transformClassesWithJarMergingForDebug’.>
com.android.build.api.transform.TransformException:
java.util.zip.ZipException:

例如:Error:Execution failed for task ‘:transformClassesWithJarMergingForDebug’.

com.android.build.api.transform.TransformException:
java.util.zip.ZipException: duplicate entry:
android/support/multidex/MultiDex$V14.class

Error:Execution failed for task ‘:transformClassesWithJarMergingForDebug’.

com.android.build.api.transform.TransformException:
java.util.zip.ZipException: duplicate entry:
android/support/annotation/ColorRes.class

这是由于导包时重复造成的。解决这个问题有个比较霸气的方法:

configurations {
    all*.exclude group: ‘com.android.support‘, module: ‘support-v4‘
     all*.exclude group: ‘com.android.support‘, module: ‘support-annotations‘
}
  • 1
  • 2
  • 3
  • 4


retrofit的baseurl不支持正斜杠

https://github.com/square/retrofit/issues/498#issuecomment-44097930




[2016-9-5 16:19:47]

Dialog中getOwnerActivity()为空

这个可以通过dialog.setOwnerActivity( )进行设置。

在使用v7包构建通知时,设置PendIntent出现异常getSlotFromBufferLocked: unknown buffer: 0xb36a9630

[2016-8-22 14:59:19]这个问题也着实的让人摸不着头脑,用的是最普通的通知,代码如下:

 NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        Intent contentIntent = new Intent(context, MessageActivity.class);
        PendingIntent contentPendIntent = PendingIntent.getActivity(context, 0, contentIntent, 0);

        Notification notification = builder
                .setContentTitle(context.getString(R.string.app_name))
                .setContentText(bundle.getString(JPushInterface.EXTRA_MESSAGE))
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.jpush_notification_icon)
                .setColor(Color.parseColor("#00EEFF"))
                .setLargeIcon(BitmapFactory.decodeResource(
                        context.getResources(), R.mipmap.ic_launcher))
                .setContentIntent(contentPendIntent)
                .build();

        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        manager.notify(1, notification);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

我尝试添加:contentIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);居然把问题解决了。

有开发者将这个异常提交到了Google issues:https://code.google.com/p/android/issues/detail?id=192357#makechanges

其实也不难分析,从异常的字面意思来进行分析,可以看出和堆栈还是有点关系的。



cm的多用户模式导致的无法安装应用问题

在这种模式下,应用卸载,只是卸载了当前用户的。其他用户的应用并没有卸载。

AndroidStudio在打包应用时总是出错,运行时没有错

一般是lint检查造成了,在该项目的build.gradle下添加:

android{
    lintOptions{
        checkAllWarnings false
        abortOnError false
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


项目路径的命名不符合ASCII编码标准很可能构建不成功

所谓符合ASCII标准,粗略的讲就是不要出现汉字。因为汉字不在ASCII标准里面。这个异常告诉我们,项目路径不能用汉字命名

AndroidStudio不打印exception的一个原因

最近在项目的全局状态下,对异常进行了捕获(包括fatal级别的异常)。突然发现AS不再打印该异常了。这是AS不打印异常的一种情况。

如果fragment的add动作,没有通过事件提交,而在此使用isAdd则还会显示没有添加

需要执行commit才能生效。

点击GridView的某个条目时报的空指针问题

假如你点击条目1,但是你在GridView的监听事件里面访问了其他没有被显示的子view,此时会报空指针。因此对GridView所有子view的操作不要放在其监听里面。举个例子:

例如在上图有以下操作,当点击某个条目时该条目背景色变为蓝色,其他条目颜色为白色,此时可能就牵扯到对所有子view的遍历。

但如果子view被遮挡了,例如被键盘遮挡了,此时如果再点击某个条目那些被遮挡的子view就会报空指针。

这样的逻辑实现最好放在adapter中。

Android的Uri获取路径常常是不准确的,尤其是文件的uri

解决办法:较为完善的解决办法就是,直接对uri进行操作,不要尝试获取路径,如果需要用到文件可以这样写:

//此处是获取流,你可以通过流来达到上传文件的目的
 getApplicationContext().getContentResolver().openInputStream(uri);
 //此处是图片的转化
 Bitmap bitmap =BitmapFactory.decodeStream(getApplicationContext().getContentResolver().openInputStream(uri))
  • 1
  • 2
  • 3
  • 4

ubuntu下无法启动studio,异常:Glide Process ‘command ‘git” finished with non-zero exit value 128

解决方案:这一般是由于studio重复开启导致的。进程没有杀死,解决办法是打开系统监视器,关闭之。

使用Glide加载大量图片出现OOM的一种解决方案 E/PriorityExecutor(23909): at dalvik.system.VMRuntime.newNonMovableArray(Native Method)

exception详情:

05-21 14:15:29.623: E/art(23909): Throwing OutOfMemoryError "Failed to allocate a 4147212 byte allocation with 1550998 free bytes and 1514KB until OOM"
05-21 14:15:29.630: E/PriorityExecutor(23909): Request threw uncaught throwable
05-21 14:15:29.630: E/PriorityExecutor(23909): java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Failed to allocate a 4147212 byte allocation with 1550998 free bytes and 1514KB until OOM
05-21 14:15:29.630: E/PriorityExecutor(23909):  at java.util.concurrent.FutureTask.report(FutureTask.java:93)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at java.util.concurrent.FutureTask.get(FutureTask.java:163)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor.afterExecute(FifoPriorityThreadPoolExecutor.java:96)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1120)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at java.lang.Thread.run(Thread.java:818)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor$DefaultThreadFactory$1.run(FifoPriorityThreadPoolExecutor.java:118)
05-21 14:15:29.630: E/PriorityExecutor(23909): Caused by: java.lang.OutOfMemoryError: Failed to allocate a 4147212 byte allocation with 1550998 free bytes and 1514KB until OOM
05-21 14:15:29.630: E/PriorityExecutor(23909):  at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:681)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:657)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.bitmap.Downsampler.decodeStream(Downsampler.java:329)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.bitmap.Downsampler.downsampleWithSize(Downsampler.java:220)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.bitmap.Downsampler.decode(Downsampler.java:153)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:50)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder.decode(StreamBitmapDecoder.java:19)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.bitmap.ImageVideoBitmapDecoder.decode(ImageVideoBitmapDecoder.java:39)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.bitmap.ImageVideoBitmapDecoder.decode(ImageVideoBitmapDecoder.java:20)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decodeBitmapWrapper(GifBitmapWrapperResourceDecoder.java:121)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decodeStream(GifBitmapWrapperResourceDecoder.java:94)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decode(GifBitmapWrapperResourceDecoder.java:71)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decode(GifBitmapWrapperResourceDecoder.java:61)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder.decode(GifBitmapWrapperResourceDecoder.java:22)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.engine.DecodeJob.decodeFromSourceData(DecodeJob.java:190)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.engine.DecodeJob.decodeSource(DecodeJob.java:177)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.engine.DecodeJob.decodeFromSource(DecodeJob.java:128)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.engine.EngineRunnable.decodeFromSource(EngineRunnable.java:122)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.engine.EngineRunnable.decode(EngineRunnable.java:101)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at com.bumptech.glide.load.engine.EngineRunnable.run(EngineRunnable.java:58)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-21 14:15:29.630: E/PriorityExecutor(23909):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-21 14:15:29.630: E/PriorityExecutor(23909):  ... 3 more
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

这个问题在glide的github的issues上讨论的也很热烈。我现在的这个项目中的加载的图片量很大,典型的button+fragment布局。但是每个页面都有很多图片,每个fragment是由listview组成(条目为大图片),单独操作每个页面没有问题,但是遇到不断切换时不断的OOM提示,issues上的很多方法都试了,还是不行,很是苦恼。而且这个问题在Android5.0以下的机器不存在,一想会不会是Dalvik虚拟机更改造成的,于是再仔细排查log,终于看到了其中有个关于dalvikdalvik.system.VMRuntime.newNonMovableArray(Native Method)的提示,stackoverflow上有这个问题的答案:添加标签<application android:largeHeap="true"问题解决。另外,这个属于内存优化的问题,除了申请大内存以外,还要搞好fragment的切换。该隐藏的隐藏,该显示的现实。

Android Packager: [main] java.util.zip.ZipException: duplicate entry: classes.dex

解决方法:rebuild或者在build.gradle中删除重复的包。

Error:Execution failed for task ‘:enterpriseplat:dexDebug’.

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process ‘command ’ \bin\java.exe” finished with non-zero exit value 2

解决办法:

defaultConfig {
     multiDexEnabled true
}
  • 1
  • 2
  • 3

http://stackoverflow.com/questions/29460443/execution-failed-for-task-appdexdebug-com-android-ide-common-process-proces

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1218/3789.html

Java.lang.IllegalStateException: fragment already active

问题分析

发生这个异常的原因,看源码:

public void setArguments(Bundle args) {
        if (mIndex >= 0) {
            throw new IllegalStateException("Fragment already active");
        }
        mArguments = args;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

那么什么是mIndex呢?继续分析问题,首先看看这个字段的定义:

// Index into active fragment array.
    int mIndex = -1;
  • 1
  • 2

原始值是-1,再看看它是在哪儿赋值的呢?找源码:

public FragmentState(Parcel in) {
        mClassName = in.readString();
        mIndex = in.readInt();
        mFromLayout = in.readInt() != 0;
        mFragmentId = in.readInt();
        mContainerId = in.readInt();
        mTag = in.readString();
        mRetainInstance = in.readInt() != 0;
        mDetached = in.readInt() != 0;
        mArguments = in.readBundle();
        mSavedFragmentState = in.readBundle();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

看到了吗?是Parcel 赋予mIndex的,而Bundle就是Parcel的一个实现类,所以你已经进行了一次fragment.setAraugment(bundle)之后再执行该方法就会出现上面的问题。

FragmentState是Fragment的一个内部类,另外看源码你会发现mIndex还可以通过set方法进行赋值,不过一般不这样做。

解决办法:

如果是第一次set就使用fragment.setAraugment(bundle)如果不是第一次就使用`fragment.getArguments().putAll(bundle)

解决思路来源:http://stackoverflow.com/questions/10364478/got-exception-fragment-already-active

Error:Execution failed for task ‘:enterpriseplat:mergeDebugResources’. > Some file crunching failed,

AS问题解决系列3—iCCP: Not recognizing known sRGB profile

导入AndroidStudio项目时出现的异常

Error:(1,
0) Plugin is too old, please update to a more recent version, or set
ANDROID_DAILY_OVERRIDE environment variable to
“8051cdccc746d532152541ee35015fd83699f14”

问题来源:导致这个错误的原因,大多是基于gradle的插件版本高,造成的。

解决办法:将gradle依赖的一些插件的版本改的低一些。或者更新(不过,大多更新失败,因为被墙的缘故)

详细的解决方法:http://stackoverflow.com/questions/29063968

导入moudle时出现:Error:Could
not run build action using Gradle installation ‘C:\Program
Files\Android\Android Studio\gradle\gradle-2.8’.

解决办法:可以将导入的moudle的build.gradle dependencies {

classpath ‘com.android.tools.build:gradle:1.3.1‘

}删除,使其使用本地版本的gradle。解决办法很多,这是其中一种。

Error:Cannot locate factory for objects of type DefaultGradleConnector, as ConnectorServiceRegistry has been closed.

解决办法:重启;

办法来源:http://stackoverflow.com/questions/27724883/gradle-project-refresh-failed-android-studio


Caused by: java.lang.ClassNotFoundException这个异常一般发生在使用ADT进行Android开发的情况下,解决办法:

思路来源:Caused by: java.lang.ClassNotFoundException[android的终极解决错误]

其实一般分为2种情况:

1、启动activity的时候,在AndroidManifest.xml 可能压根你就忘了添加一个activity,或者说activity的包名或者名字写错了,这个犯错几率很高的

2、使用的class,是一个外部的JAR包,当在工程中编译使用时,发布成APK并没有包含JAR文件,所以APK在执行的时候就找不到JAR文件,会报错。


来自EventBus的异常

1.1 .MainActivity and its super classes have no public methods with the @Subscribe annotation

解决办法:在onEvent()方法上添加注解@Subscribe。

1.2
Caused by: de.greenrobot.event.EventBusException: Subscriber class
com.cis.studytest.MainActivity and its super classes have no public
methods with the @Subscribe annotation

解决方法:没有找到@Subscribe注解的public修饰的方法,因此需要将onEvent等方法修改为public修饰即可.因为:Starting
with EventBus 2.2 we enforced methods to be public (might change with
annotations again)

关于闪退的一个原因

闪退的原因有很多,例如activity没注册,不过这都是一些可以很快速解决的。不过由于编译器的原因,尤其是Adt(eclipse
adt)开发,闪退如果抛出一些什么classnot
found,apk找不到,zygote找不到等等,这时请重新打包,应该能解决,这是很坑的异常。

时间: 2024-08-29 04:03:11

日积月累--exception记录的相关文章

python的logging模块,记录所发生的异常。

import logging import os import time def logger(user_name):     "日志功能模块"     logger = logging.getLogger(user_name)     logger.setLevel(logging.DEBUG)     log_file = '/tmp/tj' now_minute = time.strftime("%Y%m%d%H%M",time.localtime()) ag

asp.net MVC自定义错误页,并记录错误日志

只需要在Global.asax文件中添加以下代码,则可以在出错后友好的展示错误页,也不需要在很多地方写记录错误日志的代码 protected void Application_Error(object sender, EventArgs e) { if (HttpContext.Current.IsCustomErrorEnabled) { return; } var exception = Server.GetLastError(); var httpException = new HttpE

MVC使用HandleErrorAttribute自定义异常

MVC中,有一个Filter可以捕捉错误,但是它的用法是利用Attribute来实现的,而且只能加在Controller和Action上,所以不能捕捉别出的错误 其实理论上所有的错误肯定产生于Controller中,但有2种情况下,就不会被捕捉了 1.页面不存在的时候,找不到对应的Controller,那没有任何Controller被执行,所以自然也不会捕捉到错误了 2.在 IAuthorizationFilter 下发生错误的时候,错误捕捉代码在IExceptionFilter中,而IAuth

Laravel每日一记

近期在用laravel开发项目,越用感觉越方便,虽说官网说明文档内容有点少,但是实用的还是有的. 今天应要求把请求的错误记录进日志里面,一开始我是直接在start/global.php 下加入Log::error($exception),然后改了下请求的返回参数,错误如期出现,然而并没有看见错误的记录写进日志里面,日志文件也是在global文件里面配置的. 后来才想起我已经在app/errors.php配置了500与404的处理,并且返回了错误页面,所以不能执行到global下的日志操作,于是在

【转载】MVC使用HandleErrorAttribute自定义异常

本文导读:在ASP.NET MVC中,可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,当这个Action抛出了异常时MVC将会显示Error视图,该视图位于~/Views/Shared目录下. MVC中,有一个Filter可以捕捉错误,但是它的用法是利用Attribute来实现的,而且只能加在Controller和Action上,所以不能捕捉别出的错误 其实理论上所有的错误肯定产

java各种概念 Core Java总结

Base: OOA是什么?OOD是什么?OOP是什么?{ oo(object-oriented):基于对象概念,以对象为中心,以类和继承为构造机制,来认识,理解,刻画客观世界和设计,构建相应的软件系统的一门方法;本意----模拟人类的思维方式,使开发,维护,修改更加容易 - ooa(object-oriented analysis):强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是 对管理业务现状和方法的分析-------其实就是进一步对oo进行细化,初步得出

JAVA LOG4J使用方法

首先,需要在项目中导入log4j使用的JAR包,导入结果如下图: 菜单:Build Path->Configure Build Path->Add Extern Jars 导入JAR包后,在SRC级别下创建log4j.properties配置文件,配置方法如下: ### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制抬 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppend

.NET服务端开发—多线程使用小结(多线程使用常识)

有一段时间没有更新博客了,最近半年都在着写书<.NET框架设计-大型企业级框架设计艺术>,很高兴这本书将于今年的10月份由图灵出版社出版,有关本书的具体介绍等书要出版的时候我在另写一篇文行做介绍.可以先透露一下,本书是博主多年来对应用框架学习的总结,里面包含了十几个重量级框架模式,这些模式都是我们目前所经常使用到的,对于学习框架和框架开发来说是很好的参考资料,大家敬请期待. 好了,进入文章主题. 最近几个月本人一直从事着SOA服务开发工作,简单点讲就是提供服务接口的:从提供前端接口WEBAPI

Web API--自定义异常结果的处理

1.常规的异常处理 统一的异常处理,把正确的信息返回给调用者很重要,可以让接口开发人员或者用户,了解具体的原因所在,这样可以得到有效的错误处理. 参考微信API的处理,微信API,对于调用都有一个错误信息返回,不会直接裸露未经处理的异常,因此它们都是经过了一定的拦截处理,然后把错误信息包装提供给接口调用方的.如下是微信的一些接口处理错误. 错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误): {"errcode":40013,"errmsg&q