1.创建一个servier.java 方法私有化,保存数据
package com.example.service;
import com.example.iserveice.IStudent;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
public class StudentService extends Service {
// 根据学号查学生姓名
private String[] names = { "Tom", "John", "Namei", "Mary", "Kitty" };
private String query(int no) {
if (no > 0 && no <= names.length) {
return names[no - 1];
}
return null;
}
IBinder binder = new MyIbinder();
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return binder;
}
public class MyIbinder extends Binder implements IStudent {
@Override
public String queryStudent(int no) {
return query(no);
}
}
}
2.Service属于四大组件,不能够直接new,所以activity想要调用里面的方法,需要先绑定,然后获取里面的私有方法。定义一个接口,让service去实现
package com.example.iserveice;
public interface IStudent {
public String queryStudent(int no);
}
3.页面的展示
package com.example;
import android.os.Bundle;
import android.os.IBinder;
import com.example.iserveice.IStudent;
import com.example.service.StudentService;
import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText edit_no;
EditText text_name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
edit_no = (EditText) findViewById(R.id.editText1);
text_name = (EditText) findViewById(R.id.editText2);
Intent service = new Intent(this,StudentService.class);
//以绑定方式来启动服务
bindService(service, conn, Service.BIND_AUTO_CREATE);
}
MyConnection conn = new MyConnection();
IStudent istudent = null;
/**
* 实现链接的方法
* @author tarena
*
*/
public class MyConnection implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//当客户端和服务端绑定后回调服务中的OnBind方法传回Binder对象
istudent = (IStudent) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
//解绑服务的时候回调OnBinder的方法
istudent = null;
}
}
//点击事件
public void query(View view){
//获得学号
String no = edit_no.getText().toString();
//根据绑定返回的Service调用相应的方法查询学生的姓名
String name = istudent.queryStudent(Integer.parseInt(no));
text_name.setText(name);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//解绑服务
unbindService(conn);
}
}
即可实现在界面输入存在的学号获得相应的姓名