2014-07-03 3 views
2

Я новичок в android. Я пытаюсь использовать AIDL. Что я пытаюсь взять начальное значение i.e 0 из Textview и tryng, чтобы увеличить его значение, вызвав метод, определенный в файле помощи (с использованием службы.) Но TextView не обновляется при нажатии кнопки. Просьба помочь. Вот мой код.Как использовать службы AIDL для обновления значения счетчика?

CounterService.aidl

package com.example.counter; 

interface CounterService { 

int updateCounter(in int var); 
} 

CounterServ.java (услуга Разоблачение)

пакет com.example.counter;

public class CounterServ extends Service { 


@Override 
public void onCreate() { 
    super.onCreate(); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return new CounterService.Stub() { 

     @Override 
     public int updateCounter(int var) throws RemoteException { 
      // TODO Auto-generated method stub 
      return var + 1; 
     } 
    }; 
} 

@Override 
    public void onDestroy() { 
    super.onDestroy(); 

    } 


    } 

Активность пользователя с использованием службы.

общественный класс MainActivity расширяет активность {

CounterService myservice; 
AdditionServiceConnection connection; 


class AdditionServiceConnection implements ServiceConnection { 

    public void onServiceConnected(ComponentName name, IBinder Service) { 
     myservice = CounterService.Stub.asInterface(Service); 

     Toast.makeText(MainActivity.this, "Service connected", Toast.LENGTH_LONG) 
      .show(); 
    } 

    public void onServiceDisconnected(ComponentName name) { 
     myservice = null; 

     Toast.makeText(MainActivity.this, "Service connected", Toast.LENGTH_LONG) 
      .show(); 
    } 
    } 

private void initService() { 
    connection = new AdditionServiceConnection(); 
    Intent i = new Intent(); 
    i.setClassName("com.example",com.example.counter.MainActivity.class.getName()); 
    boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE); 
      } 


private void releaseService() { 
    unbindService(connection); 
    connection = null; 
     } 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    initService(); 

    Button update = (Button)findViewById(R.id.button1); 

    update.setOnClickListener(new View.OnClickListener() { 
     TextView value=(TextView)findViewById(R.id.textView1); 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


      int val,res=-1; 
      val=Integer.parseInt(value.getText().toString()); 

      try{ 

       res=myservice.updateCounter(val); 

      } 

      catch(Exception e) 
      {e.printStackTrace();} 

      value.setText(res); 


     } 



    }); 




     } 


protected void onDestroy() { 
    releaseService(); 
    } 


    } 

ответ

0

меня где мне не хватало. Я не зарегистрировал эту службу в файле манифеста и поэтому не смог ее использовать.

0

Преобразовать Рез в текстовый формат, применяя следующий код и попробовать

String str = String.valueOf(res); 

value.setText(str); 
+0

Нет .. Это не сработало. –

+0

Определите свой текст как экземпляр класса (глобально), инициализируйте его в методе onCreate() вместо setOnClickListener() и попробуйте ... Надеюсь, это поможет –

+0

Я думаю, что проблема связана с AIDL, потому что я даже не получаю тосты, заявляя, Сервис подключен "в initService(). –

 Смежные вопросы

  • Нет связанных вопросов^_^