我可以将我的Node应用程序连接到Redis,没有密码,但是当我添加密码时,我所做的一切都是正确的.
这是我的代码,正好从一个例子:
var redis = require('redis')
, sio = require('socket.io')
, RedisStore = sio.RedisStore
, io = sio.listen();
var port = 6379
, hostname = 'localhost'
, password = 'password';
var redisClient = redis.createClient(port, hostname);
redisClient.auth(password, function (err) { if (err) throw err; });
var redisSubscriber = redis.createClient(port, hostname);
redisSubscriber.auth(password, function (err) { if (err) throw err; });
io.set('store', new RedisStore({ redisPub: redisClient, redisSub: redisSubscriber, redisClient: redisClient }));
Run Code Online (Sandbox Code Playgroud)
在运行应用程序时,我得到了这个堆栈跟踪:
/home/eric/christmas/sockets/node_modules/socket.io/node_modules/redis/index.js:506
throw callback_err;
^
Error: Ready check failed: ERR …
Run Code Online (Sandbox Code Playgroud) 我正在构建一个聊天室应用程序,每隔X秒轮询一次新事件.每次发生这种情况时,此代码都会使用新数据更新RoomAdapter(ArrayAdapter的自定义子类)并将其滚动到底部:
RoomAdapter adapter = (RoomAdapter) getListAdapter();
for (int i=0; i<newEvents.size(); i++)
adapter.add(newEvents.get(i));
getListView().setSelection(events.size()-1);
Run Code Online (Sandbox Code Playgroud)
这很好,除了如果用户向上滚动以浏览房间的历史记录,它将在轮询发生时将她跳到底部.我想要做的是,如果用户已经在列表的底部,那么在对新事件进行轮询之后,它就会停留在那里.如果用户有意向上滚动,我希望用户不要被打扰.
如何检测我何时已滚动到ListView的底部?
注意:我不能做getListView().getSelectedItemPosition(),因为正如文档所说,在触摸模式下调用setSelection实际上并没有选择项目,只是滚动到它.