| 
 问题描述:web端利用的是标准的SSH框架,外加一个监听线程(开了一个端口用于接收安卓端的请求,通信而且正常),现在想在web端的监听线程中调用SSH中的service方法做一些查询呀等等操作,该如何编写?大神求带,,, public class AndroidUtil {
	private UserService userService;
	//private User user;
	public List<User> checkUser(String tel, String password) {
		System.out.println("执行到这里了,后面报空指针,");
		return userService.checkUser(tel, password);     //java.lang.NullPointerException
	}
	public UserService getUserService() {
		return userService;
	}
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
}
我该怎么办? 求可以调用的方法或者思路?  | 
|
![]()  | 
 userService、tel、 password确定这三个变量都不为NULL? 
 | 
![]()  | 
 是不是调之前没set ,还是其他参数是null? 
 | 
![]()  | 
 我发现了 ,userService为空,请问我该怎么做呢? 大神解释哈  | 
![]()  | 
 我发现了 userService为null,请问我在引用的时候,该怎么用,它才不为null? 求帮忙  | 
![]()  | 
 一眼看出userService为null,调用前请注入 
 | 
![]()  | 
 1  定义AndroidUtil 这个bean时,注入userService 
2 直接private UserService userService = new UserService 的实现  | 
![]()  | 
 3、spring配置自动注入 具体配置http://yangjian-tongxue.blog.163.com/blog/static/1075809322013761263416/  | 
![]()  | 
 我SSH不怎么了解 老大,你这是说的是这两个方法? 还是两步?  | 
![]()  | 
 建议打个断点调试,找到为null对象就好办了 
 | 
![]()  | 
 调用checkUser之前需要给AndroidUtil设置一个userService对象!  | 
![]() 20分  | 
 两个方法,直接看第二个方法,直接new UserServiceImpl 将UserServiceImpl 换为具体的UserService的实现类就可以了  | 
![]()  | 
 老大,刚刚学校里面断网了 那我按照你的方法做了,但是UserServiceImpl 中在获取当前session时又报空指针, @Service
@SuppressWarnings("unchecked")
public class UserServiceImpl extends BaseDaoImpl<User> implements UserService{
	public List<User> checkUser(String tel, String password) {
		System.out.println("执行到UserServiceImpl了,后面又报空指针");
		System.out.println("执行到UserServiceImpl了,后面又报空指针"+getSession());
		return getSession().createQuery(//
				"FROM User u WHERE u.tel=? and u.password=?")//
				.setParameter(0, tel).setParameter(1, password)
				.list();
	}
}
 | 
![]()  | 
 @Transactional
@SuppressWarnings("unchecked")
public abstract class BaseDaoImpl<T> implements BaseDao<T> {
	@Resource
	private SessionFactory sessionFactory;    
	protected Class<T> clazz; // 这是一个问题!
	public BaseDaoImpl() {
		// 通过反射得到T的真实类型
		ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
		this.clazz = (Class) pt.getActualTypeArguments()[0];
		System.out.println("clazz = " + clazz.getName());
	}
	public void save(T entity) {
		getSession().save(entity);
	}
	public void update(T entity) {
		getSession().update(entity);
	}
	public void delete(Long id) {
		Object obj = getSession().get(clazz, id);
		getSession().delete(obj);
	}
	public T getById(Long id) {
		return (T) getSession().get(clazz, id);
	}
	public List<T> getByIds(Long[] ids) {
		if (ids == null || ids.length == 0) {
			return Collections.EMPTY_LIST;
		}
		return getSession().createQuery(//
				"FROM " + clazz.getSimpleName() + " WHERE id IN(:ids)")//
				.setParameterList("ids", ids)//
				.list();
	}
	public List<T> findAll() {
		return getSession().createQuery(//
				"FROM " + clazz.getSimpleName())//
				.list();
	}
	/**
	 * 获取当前可用的Session
	 * 
	 * @return
	 */
	protected Session getSession() {
		return sessionFactory.getCurrentSession();
	}
}
这是BaseDaoImpl的代码,求老大帮忙看哈  | 
![]() 20分  | 
 session 报null,是因为你没有从struts的action中进来所以没有session 
 | 
![]()  | 
 建议你写一个struts方法来处理那些Android的事,就像用户发送网页请求一样,不要区别对待 
 | 
![]()  | 
|
![]()  | 
|
![]()  | 
 因为现在考虑的是需要分离的,web端和安卓端面向的的用户类型、数量不同,现在安卓跟服务器端通信的使用的是socket,没用Struts,  | 
![]()  | 
 里有没有配置实现类的注入 
 | 
![]()  | 
 直接用BeanFactor.getBean(service.class);获取bean就好了 
 | 
![]()  | 
 TestNetInfoService tnis = (TestNetInfoService) BeanFactory.getBean(TestNetInfoService.class); 
 | 
![]()  | 
 在你的spring里面配置了给他自动set值么? 
userService 这个对象 去查查spring注入吧  | 
![]()  | 
 那你就不要调用session啊,session是view层的方法。  | 
![]()  | 
 而且你又不是用了两个服务器,分不分离没什么意义吧。都一样占用的系统资源。 
 | 
                    
