Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android绑定服务到活动_Android_Service_Bind - Fatal编程技术网

android绑定服务到活动

android绑定服务到活动,android,service,bind,Android,Service,Bind,我在这里看到了几个类似的例子,但似乎无法让我的服务与活动绑定 我发现了错误 “android.os.binderproxy无法强制转换为IC_CommissaryService” 我的服务如下所示: public class IC_CommissaryService extends Service { @Override public IBinder onBind(Intent intent) { return mBinder; }

我在这里看到了几个类似的例子,但似乎无法让我的服务与活动绑定

我发现了错误

“android.os.binderproxy无法强制转换为IC_CommissaryService”

我的服务如下所示:

public class IC_CommissaryService extends Service 
{
    @Override
    public IBinder onBind(Intent intent) 
    {
        return mBinder;
    }

    private final IBinder mBinder = new LocalBinder();          

    public class LocalBinder extends Binder 
    {       
        IC_CommissaryService getService() 
        {
            return IC_CommissaryService.this;
        }
    }

    public int onStartCommand(Intent intent, int flags, int startId)
    {
    }

    private boolean SendOrderToServer(int orderID)
    {
        /* do stuff*/
    }
public class SubmitOrders extends Activity 
{
    IC_CommissaryService ICservice;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        Intent serviceintent = new Intent(this, IC_CommissaryService.class);
        serviceintent.putExtra("binded", true);
        bindService(serviceintent, mConnection, Context.BIND_AUTO_CREATE);
    }

    private ServiceConnection mConnection = new ServiceConnection() 
    {
        @Override
        public void onServiceConnected(ComponentName className, IBinder service) 
        {
            Log.e("TEST", "SERVICE CONNECTED");
            try
            {
                ICservice =(IC_CommissaryService.LocalBinder)service).getService();
                for(int i = 0; i < Submitorders.size(); i++)
                {
                    ICservice.SendOrderToServer(Submitorders.get(i).intValue());                                                
                }
            }
            catch(Exception ex)
            {
                Log.e("Error", "Error connecting service: " + ex.getMessage());
            } 
        }

        @Override
        public void onServiceDisconnected(ComponentName className) 
        {           
        }
    };
}
}

我的活动如下所示:

public class IC_CommissaryService extends Service 
{
    @Override
    public IBinder onBind(Intent intent) 
    {
        return mBinder;
    }

    private final IBinder mBinder = new LocalBinder();          

    public class LocalBinder extends Binder 
    {       
        IC_CommissaryService getService() 
        {
            return IC_CommissaryService.this;
        }
    }

    public int onStartCommand(Intent intent, int flags, int startId)
    {
    }

    private boolean SendOrderToServer(int orderID)
    {
        /* do stuff*/
    }
public class SubmitOrders extends Activity 
{
    IC_CommissaryService ICservice;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        Intent serviceintent = new Intent(this, IC_CommissaryService.class);
        serviceintent.putExtra("binded", true);
        bindService(serviceintent, mConnection, Context.BIND_AUTO_CREATE);
    }

    private ServiceConnection mConnection = new ServiceConnection() 
    {
        @Override
        public void onServiceConnected(ComponentName className, IBinder service) 
        {
            Log.e("TEST", "SERVICE CONNECTED");
            try
            {
                ICservice =(IC_CommissaryService.LocalBinder)service).getService();
                for(int i = 0; i < Submitorders.size(); i++)
                {
                    ICservice.SendOrderToServer(Submitorders.get(i).intValue());                                                
                }
            }
            catch(Exception ex)
            {
                Log.e("Error", "Error connecting service: " + ex.getMessage());
            } 
        }

        @Override
        public void onServiceDisconnected(ComponentName className) 
        {           
        }
    };
}
公共类提交者扩展活动
{
ICU委员服务ICservice;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
意向服务意向=新意向(此,IC_CommissaryService.class);
serviceintent.putExtra(“绑定”,true);
bindService(serviceintent、mConnection、Context.BIND\u AUTO\u CREATE);
}
专用ServiceConnection mConnection=新ServiceConnection()
{
@凌驾
服务连接上的公共无效(组件名称类名称,IBinder服务)
{
Log.e(“测试”、“服务连接”);
尝试
{
ICservice=(IC_CommissaryService.LocalBinder)service).getService();
对于(int i=0;i
我在
ICservice=(IC_CommissaryService.LocalBinder)service.getService()行上的活动中得到错误

我想我已经做了与其他帖子中建议的相同的事情,所以有什么帮助吗


谢谢,我也有同样的问题。我今天才明白。请查看绑定服务中标注有
报价的部分:

如果您的服务对您自己的应用程序是私有的,并且运行在 与客户端相同的过程(这是常见的),您应该创建 通过扩展Binder类并返回 它来自onBind()


删除AndroidManifest.ml中的android:process属性,使服务在同一进程中运行。我今天也遇到了同样的问题,它成功了。

这些是我用来解决这个问题的抽象类:

只需使用服务和活动扩展这两个类(您可以轻松地将片段从片段更改为活动)。并确保在service/fragment onCreate中设置serviceClass,如下所示:

public void onCreate( Bundle savedInstance ) {
    super.onCreate( savedInstance );
    this.serviceClass = IC_CommissaryService.class;
}

使用
ICservice=(LocalBinder)service.getService()
而不是
ICservice=(IC_CommissaryService.LocalBinder)service).getService()看看@imrankhan我不能使用localbinder.getService,因为没有localbinder的实例-这行代码正在尝试创建它instance@Sebs_Jedi-您的链接没有显示如何绑定到服务,只显示如何从“活动”启动服务,这不是我想要的want@user1280736:使用此
ICservice=(LocalBinder)getService()它不起作用。
setService(MyService.MyBinder)服务如何一个有效的语句?它根本没有任何意义。