一按计算结果的时候就报错

来源:2-2 AIDL案例(二)

qq_little权权

2016-04-11 16:32

04-11 02:39:02.488 2986-2986/com.example.wwq.aidlclient E/AndroidRuntime: FATAL EXCEPTION: main

                                                                          Process: com.example.wwq.aidlclient, PID: 2986

                                                                          java.lang.NullPointerException: Attempt to invoke interface method 'int com.example.wwq.myapplication.IMyAidl.add(int, int)' on a null object reference

                                                                              at com.example.wwq.aidlclient.MainActivity.onClick(MainActivity.java:66)

                                                                              at android.view.View.performClick(View.java:4780)

                                                                              at android.view.View$PerformClick.run(View.java:19866)

                                                                              at android.os.Handler.handleCallback(Handler.java:739)

                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)

                                                                              at android.os.Looper.loop(Looper.java:135)

                                                                              at android.app.ActivityThread.main(ActivityThread.java:5254)

                                                                              at java.lang.reflect.Method.invoke(Native Method)

                                                                              at java.lang.reflect.Method.invoke(Method.java:372)

                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)

                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)



写回答 关注

13回答

  • imooc_幕课网
    2016-07-02 16:47:57
    已采纳

       //调用远程的服务
               int res= iMyAidl.add(num2, num1);
               mEtRes.setText(res);

    出错在   mEtRes.setText(res);这里。mEtRes.setText(res);中的res是一个int 类型,那么res值对应是values文件夹中的strings.xml里的值。

    应该改为mEtRes.setText(res+“”);这样就行了

    qq_lit... 回复linhua...

    好的啊

    2017-05-03 08:53:17

    共 3 条回复 >

  • 小风筝0010
    2017-01-18 18:43:25

    我也遇到这个问题。我解决了。

    大家想一下,我们除了app  module 之外,又建立了一个aidlclient module。那么我们运行的时候,应该安装并启动哪一个呢?现在一想,既然出现了编辑框和按钮界面,那不是我们在aidlclient module编辑的页面吗?对呀。我们只安装启动了aidlclient module。也就是只要客户端。

    那么服务端跑哪里呢?想一下,是不是我们没有安装呢?对滴。

    那么怎么确定自己安装是那个module呢?看下图:

    http://img.mukewang.com/587f46bd0001915202460141.jpg

  • 半夏未夏
    2016-08-20 11:31:08

    把app那个module先运行到手机上一次就可以了,手机上根本就没有你要远程调用的那个进程怎么调用。

  • 慕勒9345121
    2016-08-02 16:14:48

    在服务端 注册<service android:name=".AIDL"
       android:enabled="true"
       android:exported="true"></service>

  • 慕勒9345121
    2016-08-02 15:13:46

    解决了没有啊 啊啊啊,我也刚遇到这个问题

  • 慕勒9345121
    2016-08-02 15:13:28

    解决了没有啊 啊啊啊,我也刚遇到这个问题

  • imooc_幕课网
    2016-05-14 20:14:03

    service 与activity一样必须在AndroidManifest.xml里面注册,因为你没有注册,肯定出错了

    轻敲浅唱xL... 回复qq_lit...

    除了注册之外还要设置属性:exported=true

    2016-10-11 15:56:41

    共 2 条回复 >

  • 麦穗3
    2016-05-05 15:21:48

    http://img.mukewang.com/572af47e00012f5a08540387.jpg这是啥意思啊 a

    qq_lit... 回复麦穗3

    不知道

    2016-05-09 09:06:12

    共 3 条回复 >

  • qq_little权权
    2016-04-26 09:27:13

    package com.example.wwq.AidlClient;

    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.ServiceConnection;
    import android.os.IBinder;
    import android.os.RemoteException;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;

    import com.example.wwq.myapplication.IMyAidl;

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {

       private EditText mEtNum1;
       private EditText mEtNum2;
       private EditText mEtRes;
       private Button mBtnAdd;

       IMyAidl iMyAidl;
       private ServiceConnection conn = new ServiceConnection() {
           //绑定上服务的时候
           @Override
           public void onServiceConnected(ComponentName name, IBinder service) {
            //拿到了远程的服务
             iMyAidl =  IMyAidl.Stub.asInterface(service);
           }
           //断开服务的时候
           @Override
           public void onServiceDisconnected(ComponentName name) {
               //回收资源
               iMyAidl = null;
           }
       };

       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           initView();
           //软件一启动就绑定服务
           bindService();
       }

       private void initView() {
           mEtNum1 = (EditText) findViewById(R.id.et_num1);
           mEtNum2 = (EditText) findViewById(R.id.et_num2);
           mEtRes = (EditText) findViewById(R.id.et_res);
           mBtnAdd = (Button) findViewById(R.id.btn_add);

           mBtnAdd.setOnClickListener(this);


       }

       @Override
       public void onClick(View v) {
           int num1 = Integer.parseInt(mEtNum1.getText().toString());
          int num2 = Integer.parseInt(mEtNum2.getText().toString());


           try {
               //调用远程的服务
               int res= iMyAidl.add(num2, num1);
               mEtRes.setText(res);

           } catch (RemoteException e) {
               e.printStackTrace();
               mEtRes.setText("错误了");
           }

       }

       private void bindService() {
           //获取到服务端
           Intent intent = new Intent();
           //新版本,必须 显示intent启动 绑定服务
           intent.setComponent(new ComponentName
                   ("com.example.wwq.myapplication","com.example.wwq.myapplication.IRemoteService"));

           bindService(intent,conn, Context.BIND_AUTO_CREATE);
       }

       @Override
       protected void onDestroy() {
           super.onDestroy();
           unbindService(conn);
       }
    }

  • Js_Ly
    2016-04-25 16:11:25

    服务端那个类的名字

    包名+类名   用.把前面的包名省略了

    qq_lit... 回复Js_Ly

    调用远程服务, int res=那里显示空指针

    2016-04-26 09:28:09

    共 3 条回复 >

  • Js_Ly
    2016-04-24 22:03:21

    服务端注册Service

    <service android:name=".AIDL"
       android:enabled="true"
       android:exported="true"></service>

    试试

    qq_lit...

    这个.AIDL是什么

    2016-04-25 16:07:42

    共 1 条回复 >

  • 你看起来很好吃哦
    2016-04-18 14:38:10

    if(!edt_num1.getText().toString().equals("") && !edt_num2.getText().toString().equals("")){
       int num1 = Integer.parseInt(edt_num1.getText().toString());
       int num2 = Integer.parseInt(edt_num2.getText().toString());
       try {
           int res = sueAidl.add(num1,num2);
           edt_res.setText(res+"");
       } catch (RemoteException e) {
           e.printStackTrace();
       }
    }else{
       Snackbar.make(v, "请输入两个值", Snackbar.LENGTH_LONG).show();
    }

  • 你看起来很好吃哦
    2016-04-12 11:24:55

    NullPointerException异常,add(int, int)应该是空的,没做判断

    恨自己不能小... 回复qq_lit...

    我也是这样的 怎么破

    2016-04-14 22:33:55

    共 2 条回复 >

AIDL-小白成长记

AIDL-小白成长记,想要快速入门,看本次的教程就对了

42640 学习 · 60 问题

查看课程

相似问题