问题描述: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层的方法。 |
|
而且你又不是用了两个服务器,分不分离没什么意义吧。都一样占用的系统资源。
|