Code Bye

WEB服务器端是标准SSH框架的,怎么调用其中的service方法?一直空指针错误

问题描述: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?
引用 1 楼 hjq2013 的回复:

userService、tel、 password确定这三个变量都不为NULL?

我发现了  ,userService为空,请问我该怎么做呢?  大神解释哈

引用 2 楼 u011298603 的回复:

是不是调之前没set ,还是其他参数是null?

我发现了 userService为null,请问我在引用的时候,该怎么用,它才不为null?   求帮忙

一眼看出userService为null,调用前请注入
1  定义AndroidUtil 这个bean时,注入userService
2  直接private UserService userService = new UserService 的实现
引用 6 楼 magi1201 的回复:

1  定义AndroidUtil 这个bean时,注入userService
2  直接private UserService userService = new UserService 的实现

3、spring配置自动注入  具体配置http://yangjian-tongxue.blog.163.com/blog/static/1075809322013761263416/

引用 6 楼 magi1201 的回复:

1  定义AndroidUtil 这个bean时,注入userService
2  直接private UserService userService = new UserService 的实现

       我SSH不怎么了解  老大,你这是说的是这两个方法?  还是两步?

建议打个断点调试,找到为null对象就好办了
引用 3 楼 u013229247 的回复:
Quote: 引用 1 楼 hjq2013 的回复:

userService、tel、 password确定这三个变量都不为NULL?

我发现了  ,userService为空,请问我该怎么做呢?  大神解释哈

调用checkUser之前需要给AndroidUtil设置一个userService对象!


20分
引用 8 楼 u013229247 的回复:
Quote: 引用 6 楼 magi1201 的回复:

1  定义AndroidUtil 这个bean时,注入userService
2  直接private UserService userService = new UserService 的实现

       我SSH不怎么了解  老大,你这是说的是这两个方法?  还是两步?

两个方法,直接看第二个方法,直接new UserServiceImpl 将UserServiceImpl 换为具体的UserService的实现类就可以了

引用 11 楼 magi1201 的回复:
Quote: 引用 8 楼 u013229247 的回复:
Quote: 引用 6 楼 magi1201 的回复:

1  定义AndroidUtil 这个bean时,注入userService
2  直接private UserService userService = new UserService 的实现

       我SSH不怎么了解  老大,你这是说的是这两个方法?  还是两步?

两个方法,直接看第二个方法,直接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();
	}




}
引用 11 楼 magi1201 的回复:
Quote: 引用 8 楼 u013229247 的回复:
Quote: 引用 6 楼 magi1201 的回复:

1  定义AndroidUtil 这个bean时,注入userService
2  直接private UserService userService = new UserService 的实现

       我SSH不怎么了解  老大,你这是说的是这两个方法?  还是两步?

两个方法,直接看第二个方法,直接new UserServiceImpl 将UserServiceImpl 换为具体的UserService的实现类就可以了

@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的事,就像用户发送网页请求一样,不要区别对待
引用 15 楼 u014074757 的回复:

建议你写一个struts方法来处理那些Android的事,就像用户发送网页请求一样,不要区别对待

如果是这样做,可以把安卓端和和web端访问端口分离吗?  比如安卓端用9999,web端用8080?

引用 16 楼 u013229247 的回复:
Quote: 引用 15 楼 u014074757 的回复:

建议你写一个struts方法来处理那些Android的事,就像用户发送网页请求一样,不要区别对待

如果是这样做,可以把安卓端和和web端访问端口分离吗?  比如安卓端用9999,web端用8080?

为什么要分离呢?用路径分离就是了:比如:http://andriod.xx.xx

引用 17 楼 u014074757 的回复:
Quote: 引用 16 楼 u013229247 的回复:
Quote: 引用 15 楼 u014074757 的回复:

建议你写一个struts方法来处理那些Android的事,就像用户发送网页请求一样,不要区别对待

如果是这样做,可以把安卓端和和web端访问端口分离吗?  比如安卓端用9999,web端用8080?

为什么要分离呢?用路径分离就是了:比如:http://andriod.xx.xx

因为现在考虑的是需要分离的,web端和安卓端面向的的用户类型、数量不同,现在安卓跟服务器端通信的使用的是socket,没用Struts,
web项目用的是SSh框架,就想在此项目里面加一个监听,监听里面调用web项目中已经写好的service层的一些方法,可是调用就一直报上面的空指针错,而web项目本身此方法没有错误           请问您有什么方法可以让我调用service层的一些方法吗?

里有没有配置实现类的注入
直接用BeanFactor.getBean(service.class);获取bean就好了
TestNetInfoService tnis = (TestNetInfoService) BeanFactory.getBean(TestNetInfoService.class);
在你的spring里面配置了给他自动set值么?
userService  这个对象
去查查spring注入吧
引用 18 楼 u013229247 的回复:
Quote: 引用 17 楼 u014074757 的回复:
Quote: 引用 16 楼 u013229247 的回复:
Quote: 引用 15 楼 u014074757 的回复:

建议你写一个struts方法来处理那些Android的事,就像用户发送网页请求一样,不要区别对待

如果是这样做,可以把安卓端和和web端访问端口分离吗?  比如安卓端用9999,web端用8080?

为什么要分离呢?用路径分离就是了:比如:http://andriod.xx.xx

因为现在考虑的是需要分离的,web端和安卓端面向的的用户类型、数量不同,现在安卓跟服务器端通信的使用的是socket,没用Struts,
web项目用的是SSh框架,就想在此项目里面加一个监听,监听里面调用web项目中已经写好的service层的一些方法,可是调用就一直报上面的空指针错,而web项目本身此方法没有错误           请问您有什么方法可以让我调用service层的一些方法吗?

那你就不要调用session啊,session是view层的方法。

而且你又不是用了两个服务器,分不分离没什么意义吧。都一样占用的系统资源。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明WEB服务器端是标准SSH框架的,怎么调用其中的service方法?一直空指针错误