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

