-
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;
}
};
то они не выполняются при загрузке активити, а только если перейти на другое а потом снова на него вернуться... В общем хочу понять как мне при запуске активити сразу получить нужные данные сервиса. Чтоб когда активити уже на экране то на нем нужные мне данные
-
vergiliy
- Сообщения: 9
- Зарегистрирован: 25 дек 2014, 19:41
Сообщение
vergiliy » 14 май 2015, 19:45
Извиняюсь, при таком коде ошибки нет, но функция не вызывается и данные из сервиса не берутся. я даже пробовал лог выводить вместо : 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
Сообщение
ivannatobedev » 14 май 2015, 20:26
я работу с сервером увел в Thread. Но вот уже начинаю понемногу смотреть в сторону Service. Для не тяжелых и не частых задач можно использовать AsyncTask. Думаю это как раз Ваш случай.