2015-12-03 29 views
-1

我有一個具有各種方法的服務,他們所做的只是給出一個logcat消息,但即使我已在該活動中創建了該服務的一個實例,這些方法似乎仍未被調用類。

我的服務類代碼是 -

無法從MainActivity調用服務的方法

public class service extends Service { 
IBinder ob=new My_Ibinder(); 


public class My_Ibinder extends Binder{ 
    public service get_MyService(){ 
     return service.this; 
    } 

    } 


@Override 
public void onCreate() { 
    super.onCreate(); 
Log.e("SERVICE CREATED",""); 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.e("SERVICE OnStartCommand",""); 
    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
    public IBinder onBind(Intent intent) { 
     Log.e("SERVICE onBind",""); 
     return ob; 
    } 


    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Log.e("SERVICE DESTROYED",""); 
    } 

    String data(){ 
     Log.e("SERVICE data method",""); 

     return "DATA SUCCESSFULLY TRANSFERRED"; 
    } 

    public void ok(){ 
     Log.e("SERVICE ok method",""); 
    } 


} 


這裏我所說的方法是數據()和OK()。
我的活動課是 -

Button start,stop,data,check; 
    TextView tv; 
    service ser; 
    Boolean flag=false; 


protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     start=(Button)findViewById(R.id.start); 
     check=(Button)findViewById(R.id.check); 
     stop=(Button)findViewById(R.id.stop); 
     data=(Button)findViewById(R.id.data); 
     tv=(TextView)findViewById(R.id.tv); 

     start.setOnClickListener(new OnClickListener(){public void onClick(View v){ bindService(new Intent(MainActivity.this,service.class),sc,Context.BIND_AUTO_CREATE); }}); 
     stop.setOnClickListener(new OnClickListener(){public void onClick(View v){ unbindService(sc); flag=false; }}); 
     data.setOnClickListener(new OnClickListener(){public void onClick(View v){ ser.ok();tv.setText(ser.data());  }}); 
     check.setOnClickListener(new OnClickListener(){public void onClick(View v){  Log.e(""+flag,"sfsfsdfdssfsdffsdfs");  }}); 

    } 


    private ServiceConnection sc=new ServiceConnection(){ 

     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      My_Ibinder ob=(My_Ibinder)service; 
      ser=ob.get_MyService(); 
      flag=true; 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      flag=false; 
      ser=null; 
     } 

    }; 


單擊按鈕時我沒有得到任何的logcat消息。無論是我需要調用的方法,還是從onCreate(),onBind()和onDestroy()方法,如果服務被成功創建都應該被調用。

我檢查了設置中的運行進程,並且該服務在那裏不存在。
奇怪的是,如果我使用startService(intent)啓動服務,那麼它似乎工作正常(雖然我無法與它通信)。我猜這個服務綁定存在一些問題。
請幫助。

+0

您是否將服務放入您的清單中? –

+0

是的,我已經添加了它 –

回答

1

終於明白了......這樣一個愚蠢愚蠢的錯誤,我做了。雖然給logcat消息,我沒有添加文本屬性,它只是一個標籤。現在我已經添加了一個文本,它完美的工作。這是一個小而重要的要點。當然,我們都使用logcat消息來DEBUG我們的程序,但這次問題是LOGCAT本身。永遠不會忘記這一個!