GVKun编程网logo

Aidl调用, 回调返回null的问题(android aidl 回调)

21

本篇文章给大家谈谈Aidl调用,回调返回null的问题,以及androidaidl回调的知识点,同时本文还将给你拓展@ResponseBody返回null对象ajax回调不成功、Aidl调用何时使用本

本篇文章给大家谈谈Aidl调用, 回调返回null的问题,以及android aidl 回调的知识点,同时本文还将给你拓展@ResponseBody 返回null对象 ajax回调不成功、Aidl调用何时使用本地对象问题、android – getParcelable返回null,即使传递的对象不为null、android – 方法返回null值等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Aidl调用, 回调返回null的问题(android aidl 回调)

Aidl调用, 回调返回null的问题(android aidl 回调)

今天为Aild 加了一个回调, 结果在服务端的callback总是返回null. 于是debug一步步跟进去 发现得到的arg1就是null 也就是data.readStrongBinder()返回了null

输入图片说明

那只能证明是没有在客户端写进去:

输入图片说明

原来asBinder是null.

输入图片说明

根本原因是 应该使用 new ManagerCallback.Stub() 而不是 new ManagerCallback

修改之后 成功运行

@ResponseBody 返回null对象 ajax回调不成功

@ResponseBody 返回null对象 ajax回调不成功

@ResponseBody 的返回处理都可以用一个继承ObjectMapper的类去处理 比如,过滤特殊字符,处理null(属性,不是对象),针对返回的null对象(如果ajax对设置了datetyp:"json",不会回调在success,而会在error中回调),可以包装json,{result:"true",data:""}即保证是json,要么去了datatype:"json",再如时间格式的处理 也就是说ajax的回调success,还是error不仅仅看返回状态,还看返回的是否也请求的要求 $.ajax({ type: "post",url: "${applicationScope.contextpath}/tbConFirmFee/getCustomer",data: dataParent,/// dataType: "json",success: function (data) { allPrpos(data); alert("====回调====="); alert("====回调====="+ data); allPrpos(data); alert("====回调====="); alert("====回调r====="+ data); allPrpos(data); alert("====回调====="); },error:function(data){ var a=data; allPrpos(a); alert("====回调error111====="+ data); alert("====回调error11====="+data); allPrpos(data); } }); === @RequestMapping("/tbConFirmFee/getCustomer") public @ResponseBody TbCusFirm getCustomer(@RequestParam(value = "customerid",required = false) String customerid,Model model) throws EsteelException { TbCusFirm use = new TbCusFirm(); if(!"".equals(customerid)&&null!=customerid){ use.setCustomerKey(BigDecimal.valueOf(Long.valueOf(customerid))); use= tbConFirmFeeService.getCustomerInfo(use); } return use; }

Aidl调用何时使用本地对象问题

Aidl调用何时使用本地对象问题

今天系统需要采用aidl进行跨进程调用,讨论到了aidl对象调用效率问题,总结如下

1. 同一个apk,同一个进程的Activity 调用Service,系统会直接把binder这个java对象传递给Activity,会一般的回调无异

源码

/**
 * Cast an IBinder object into an com.example.testaidlservice.IMyAidlInterface interface,
 * generating a proxy if needed.
 */
        public static com.example.testaidlservice.IMyAidlInterface asInterface(android.os.IBinder obj) {
            if ((obj == null)) {
                return null;
            }
            android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
            if (((iin != null) && (iin instanceof com.example.testaidlservice.IMyAidlInterface))) {
                return ((com.example.testaidlservice.IMyAidlInterface) iin);
            }
            return new com.example.testaidlservice.IMyAidlInterface.Stub.Proxy(obj);
        }

 

 

2. 同一个Apk,Activity 指定process a, Service process 为b, Activity aidl调用Service,当然需要进行序列化反序列化,需要创建一次对象

 

 

3.不同apk, Activity 调用另一个Apk的Service, 系统需要对Service的binder对象序列化,在
Client端进行反序列化

 

4. 不同Apk , share uid不同, process相同, 实际上还是两个进程,当然也需要binder的序列化反序列化


 

5. 不同Apk, shareuid 相同, process相同,实际上是一个进程,但是aidl调用,仍然需要 进行序列化反序列化, 在客户端创建对象

 

 

 

结论:

1.Android 为了提高aidl的效率, 对于同一个apk内,同一个进程内的aidl调用,直接转递了java对象,其他情况,需要对对象进行一次序列化和反序列化,性能比前者低

2.只有在shareuid process 都相同的情况下,组件占用的进程才相同。 更多请参考 http://www.cnblogs.com/gansc23/archive/2011/01/21/1941134.html

android – getParcelable返回null,即使传递的对象不为null

android – getParcelable返回null,即使传递的对象不为null

我想将一个可分配的对象传递给另一个活动.
所以我实现了一个parcelable类来完成这个.
我编码:

Intent intent = new Intent(mainactivity.this, SecondActivity.class);
Object[] object = new Object();
intent.putExtra("Object ", object);
startActivity(intent);

在我编码的第二个活动中:

Object[] object = (Object[]) getIntent().getExtras().getParcelable("object");

当我将对象传递给Intent时,它不是null.
而当我在第二个Activity中得到它时为null.
你有什么建议吗?提前致谢!

解决方法:

改变这个:

Object object = (Object) getIntent().getExtras().getParcelable("object");

对此:

Object object = getIntent().getExtras().get("Object");

只有在使用putParcelable或在代码的发送部分使用putExtra插入Parcelable对象时,才应使用getParcelable.

附:还要注意键名Object和对象的区别

android – 方法返回null值

android – 方法返回null值

这是我的布局代码;

static  String userLocation(String url) {

    RequestQueue queue = Volley.newRequestQueue(context);
    // String url = "http://www.jobdiagnosis.com/iphone/userlocation.PHP";

     StringRequest dr = new StringRequest(Request.Method.GET,url,new Response.Listener<String>() 
                {
                    @Override
                    public void onResponse(String response) {
                        // response
                        res=response;
                        //edit_location.setText(response);
                       // Toast.makeText(context,response,Toast.LENGTH_LONG).show();
                    }
                },new Response.ErrorListener() 
                {
                     @Override
                     public void onErrorResponse(VolleyError error) {
                         // error.
                         Toast.makeText(getApplicationContext(),"error"+error,Toast.LENGTH_LONG).show();
                         Log.d("error",""+error);
                   }
                }
            );
            queue.add(dr);
            return res;
 }

当我用同样的方法干杯响应时,响应打印正常
当我调用method和print return语句时,res打印null.

任何帮助表示赞赏.先感谢您.

请建议我如何在一项或多项活动中分享回复

抱歉我的英语不好..

解决方法

尝试将res声明为全局变量.没有返回值.因为您不知道,请求何时完成.并使用此全局变量.

关于Aidl调用, 回调返回null的问题android aidl 回调的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于@ResponseBody 返回null对象 ajax回调不成功、Aidl调用何时使用本地对象问题、android – getParcelable返回null,即使传递的对象不为null、android – 方法返回null值等相关内容,可以在本站寻找。

本文标签: