Запуск сервиса и работа с ним

Ответить
vergiliy
Сообщения: 9
Зарегистрирован: 25 дек 2014, 19:41

Запуск сервиса и работа с ним

Сообщение vergiliy » 14 май 2015, 17:37

Добрый день, есть проблема... Есть сервис и Активити. Я подключаюсь к сервису так:

Код: Выделить всё

	private ServiceConnection mConnection = new ServiceConnection() {
		public void onServiceConnected(ComponentName className, IBinder service) {  
			myService = ((SockServise.MyBinder)service).getService();
        }
        public void onServiceDisconnected(ComponentName className) {

        }
    };  
Можно ли потом в onCreate сразу вызвать методы сервиса??? У меня выдает ошибки.... а если прописать метод в сервис коннект так:

Код: Выделить всё

	private ServiceConnection mConnection = new ServiceConnection() {
		public void onServiceConnected(ComponentName className, IBinder service) {  
			myService = ((SockServise.MyBinder)service).getService();
			bound = true;
			countNewQuery=myService.getCountNewFr();
			setCount(countNewQuery);
        }
        public void onServiceDisconnected(ComponentName className) {
	        bound = false;
        }
    };  
то они не выполняются при загрузке активити, а только если перейти на другое а потом снова на него вернуться... В общем хочу понять как мне при запуске активити сразу получить нужные данные сервиса. Чтоб когда активити уже на экране то на нем нужные мне данные

Аватара пользователя
ivannatobedev
Сообщения: 30
Зарегистрирован: 03 дек 2014, 13:27

Re: Запуск сервиса и работа с ним

Сообщение ivannatobedev » 14 май 2015, 19:35

какие ошибки? судя по всему у Вас nullPointer на вызове метода сервиса. если так, то посмотрите жизненный цикл активити.http://developer.android.com/reference/ ... ivity.html

vergiliy
Сообщения: 9
Зарегистрирован: 25 дек 2014, 19:41

Re: Запуск сервиса и работа с ним

Сообщение vergiliy » 14 май 2015, 19:45

ivannatobedev писал(а):какие ошибки? судя по всему у Вас nullPointer на вызове метода сервиса. если так, то посмотрите жизненный цикл активити.http://developer.android.com/reference/ ... ivity.html
Извиняюсь, при таком коде ошибки нет, но функция не вызывается и данные из сервиса не берутся. я даже пробовал лог выводить вместо : countNewQuery=myService.getCountNewFr(); лог не выводился в консоль... а если с этого активити перейти на другое и снова вернуться, то все выполняется. В общем задача такая. есть стартовая страница и при ее запуске должно быть так: сервис с БД на сервере берет данные и выводит в это стартовое активити. Подскажите как это сделать? Я так понял что методы сервиса берутся только при обработке онклил..

вот весь код активити:

Код: Выделить всё

public class MainScreen extends Activity {
	private Button mainMessage,mainExit,mainSearch,mainFriend;
	boolean bound = false;
	ServiceConnection sConn;
	SockServise myService;	
	BroadcastReceiver br;
	Intent intent;
	public final static String BROADCAST_ACTION = "com.example.*";
	public final static String FRIEND = "friend";
	public  String countNewQuery;

	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);	   
		setContentView(R.layout.main_screan); //messaging_screen);
	    intent = new Intent(this, SockServise.class);
	    sConn = new ServiceConnection() {

	      public void onServiceConnected(ComponentName name, IBinder binder) {
	        myService = ((SockServise.MyBinder) binder).getService(); 
	        bound = true;
	        Log.d("количество", "465465465");
			countNewQuery=myService.getCountNewFr();
			setCount(countNewQuery);
	      }

	      public void onServiceDisconnected(ComponentName name) {
	        bound = false;
	      }
	    }; 

		mainMessage = (Button) findViewById(R.id.mainMessage);
		mainExit = (Button) findViewById(R.id.mainExit);
		mainSearch = (Button) findViewById(R.id.mainSearch);
		mainFriend = (Button) findViewById(R.id.mainFriend);
		mainMessage.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainScreen.this, Message.class);
	    		startActivity(intent);
			}
		});
		mainFriend.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainScreen.this, Friend.class);
				intent.putExtra("countNewFriends", countNewQuery.toString());
	    		startActivity(intent);
			}
		});
		mainSearch.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainScreen.this, FindFriend.class);
	    		startActivity(intent);
			}
		});
		mainExit.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainScreen.this, Login.class);
	    		startActivity(intent);
			}
		});		

		//br = new BroadcastReceiver() {
		//	@Override
		//	public void onReceive(Context context, Intent intent) {
		//		String task = intent.getStringExtra(FRIEND);
		//		getFriend(task);
		//	}
		//};
	    IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION);
	    registerReceiver(br, intFilt); 	
	}
	public void getFriend(String task){
		try {
			JSONObject json = new JSONObject(task);
			String status = json.getString("status");
			if(status.equals("1")){
				countNewQuery = json.getString("countNewQuery");
				if(countNewQuery.length()>0){
					mainFriend.setText("Друзья ("+countNewQuery+")");
				}
				else{
					mainFriend.setText("Друзья"+countNewQuery);	
				}
		    }
		
		} catch (JSONException e) {
			e.printStackTrace();
		}
	}
	@Override
	protected void onStart() {
	   super.onStart();
	   bindService(new Intent(MainScreen.this, SockServise.class), sConn , Context.BIND_AUTO_CREATE);
	   
	}		
	@Override
	protected void onPause() {
		super.onPause();
		//unregisterReceiver(br);
		unbindService(sConn);
	}
	public void setCount(String count){
		if(count.length()>0){
			mainFriend.setText("Друзья ("+count+")");
		}
		else{
			mainFriend.setText("Друзья"+count);	
		}			
	}
	@Override
	protected void onResume() 
	{		
		super.onResume();
		IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION);
		bindService(new Intent(MainScreen.this, SockServise.class), sConn , Context.BIND_AUTO_CREATE);
		registerReceiver(br, intFilt);

		
	}
	

}

Аватара пользователя
ivannatobedev
Сообщения: 30
Зарегистрирован: 03 дек 2014, 13:27

Re: Запуск сервиса и работа с ним

Сообщение ivannatobedev » 14 май 2015, 20:26

я работу с сервером увел в Thread. Но вот уже начинаю понемногу смотреть в сторону Service. Для не тяжелых и не частых задач можно использовать AsyncTask. Думаю это как раз Ваш случай.

Ответить