我目前正在使用Mongrel开发自定义Web应用程序项目.
我希望Mongrel使用基于正则表达式的定义的Http Handler.例如,每当有人调用http://test/bla1.js或http://test/bla2.js这样的URL时,就会调用相同的Http处理程序来管理请求.
到目前为止我的代码看起来像这样:
http_server = Mongrel::Configurator.new :host => config.get("http_host") do
listener :port => config.get("http_port") do
uri Regexp.escape("/[a-z0-9]+.js"), :handler => BLAH::CustomHandler.new
uri '/ui/public', :handler => Mongrel::DirHandler.new("#{$d}/public/")
uri '/favicon', :handler => Mongrel::Error404Handler.new('')
trap("INT") { stop }
run
end
end
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我试图在这里使用正则表达式而不是字符串:
uri Regexp.escape("/[a-z0-9]+.js"), :handler => BLAH::CustomHandler.new
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有解决方案吗
感谢那.
我无法理解Has****HandlersGWT 中接口的含义.如果一个类实现HasClickHandlers(addClickHandler)和ClickHandler(onClick)接口会有什么不同.
谢谢
所以从我收集的内容来看,Socket连接既不是可序列化的也不是可分配的,但我需要将蓝牙连接传递给另一个Activity.我不想写服务作为中间人,所以请不要将其作为解决方案发布.我听说有一种方法可以使用自定义应用程序界面传递这些类型的对象,但我不能,在我的生活中,找到一个有效的例子.我已经看到很多文档说"这是可能的",但没有任何显示如何做到这一点.
这是我的第一个问题,如果我不遵守任何论坛规则,请原谅我.
我需要我的程序等待3秒然后更改内容视图
我的代码是:
setContentView(R.layout.logout);
new Thread(new Runnable() {
@Override
public void run(){
try {
synchronized(this){
wait(3000);
}
}
catch(InterruptedException ex){
}
}
}).start();
setContentView(R.layout.main);
Run Code Online (Sandbox Code Playgroud)
该程序没有错误,但没有等待.当它到达这个部分时,它只显示"主"布局而根本没有显示"注销"布局.
我的做法有什么问题?
我有一个服务,它从Web获取一些数据并更新一个"存储"在应用程序中的列表.
因此,我可以从主活动访问它并将其用于我的ArrayAdapter.
更新数据时,列表中引用的项目会更改.
我的问题是,在主要活动中更新适配器中的数据的最佳做法是什么?
我有两个解决方案,但我不知道它们是否正确.除此之外,我想实现一个不使用太多电池的版本!
第一个:每秒调用一次的线程,用notifyDataSetChanged()更新适配器:
private void startListUpdateThread()
{
Thread ListManageThread = new Thread() {
LinkItem listItem;
public void run() {
Log.d("DL", "List Update - start");
while(true)
{
runOnUiThread(UpdateGUIList);
try {
Thread.sleep(1000); //5Sekunden!
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("DL", "ERROR: InterruptedException - " + e.getMessage());
}
}
}
};
ListManageThread.start();
}
private Runnable UpdateGUIList = new Runnable() {
@Override
public void run() {
mFileAdapter.notifyDataSetChanged();
}
};
Run Code Online (Sandbox Code Playgroud)
第二:使用延迟的Handler post私有final Handler handler = new Handler(); …
我在主ui线程(mUIHandler)和工作线程(其他线程)中创建了一个Handler实例,当我尝试执行runnable的run方法时,run方法几乎被执行了10次,但是有那个1次没有被执行.
mUIHandler.post(uiRunnable) - >它是否总能保证执行runnable中的run方法?
我甚至添加了日志方法来检查,并且可以看到日志直到post方法innvocation被执行但是run方法日志没有显示.
帖子(可运行)如何在内部工作?是否保证ui线程(带有处理程序的线程)会在调用post后立即执行此操作?
任何帮助,将不胜感激.
谢谢!
在我团队的Android应用程序中,我有一个从启动运行的服务,该服务与服务器通信以执行诸如登录,注册,手机之间聊天以及更新手机数据库之类的操作。
我需要使我的服务与活动进行双向通信:例如,我目前正在进行登录活动,并且用户名和密码是从应用程序屏幕上的文本字段获取的字符串,并且我已经能够通过它们服务,以向服务器发送授权命令。
public void loginPressed(View v){
usernameStr = usernameField.getText().toString();
passwordStr = passwordField.getText().toString();
if (!bound) return;
Bundle b = new Bundle();
Message msg = Message.obtain(null, ChatService.LOGIN);
try {
b.putString("username", usernameStr);
b.putString("password", passwordStr);
msg.setData(b);
messenger.send(msg);
}
catch (RemoteException e) {
}
Run Code Online (Sandbox Code Playgroud)
正如我所期望的那样。当服务器以一条消息说明登录是否成功时,我需要它将消息传递回活动,以便如果成功则可以启动主活动,或者如果没有成功则提示重新输入。
我试图使用msg.replyTo字段来获取返回信息,以将信息发送回去,但是当我运行应用程序时,它强制关闭并带有空指针异常,我不知道为什么会这样。这是似乎是罪魁祸首的代码:
private class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case LOGIN:
Bundle b = msg.getData();
String username = b.getString("username");
String password = b.getString("password");
String loginMessage = TCPCall.login(username, password);
connection.sendMessage(loginMessage);
String loginReturn = connection.retrieveMessage();
Message …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的代码:
package com.example.conn08;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class MainActivity extends Activity
{
private static CustomHandler mHandler;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
updateUI();
}
private class CustomHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
MainActivity.this.updateUI();
}
public void sleep(long delayMillis)
{
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
}
private void updateUI()
{
mHandler.sleep(1000);
Log.v("updateUI", "kokoko");
}
}
Run Code Online (Sandbox Code Playgroud)
但在
MainActivity.this.updateUI();
Run Code Online (Sandbox Code Playgroud)
我知道了
此Handler类应该是静态的,否则可能会发生泄漏(com.example.conn08.MainActivity.CustomHandler)
为什么?请帮忙
编辑代码:
package com.example.conn08;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler; …Run Code Online (Sandbox Code Playgroud) -我正在开发一个需要以慢动作播放视频的项目.
-我很清楚Android没有提供这些功能.
-我发现PVPlayer Engine和libVLC拥有这些功能,但我没有找到任何教程或适当的文档将它们包含在android项目中并使用它们.
-所以我尝试通过使用Runnable和这样做Handler,它成功地减慢了视频,但他们在播放期间拥有混蛋.
public class MainActivity extends Activity {
VideoView vx;
Button mbutt;
Handler h ;
int curr = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
h = new Handler();
vx = (VideoView)findViewById(R.id.videoView);
mbutt = (Button)findViewById(R.id.button_Play);
vx.setVideoPath("/mnt/sdcard/you.mp4");
mbutt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
vx.start();
}
});
Runnable r = new Runnable() {
@Override
public void run() {
if (vx != null) …Run Code Online (Sandbox Code Playgroud) 没有关于如何使用obtainMessage带有4个参数的方法编写处理程序的示例.
我尝试了几种方法,但仍然遇到同样的错误.
Handler mHandler = new Handler() {
public final Message obtainMessage(int what,
int arg1, int arg2, Object obj) {
}
};
Run Code Online (Sandbox Code Playgroud)
这显然是错误的,但考虑到没有任何示例可以帮助我,我可以使用一点方向.