【发布时间】:2011-05-24 19:12:25
【问题描述】:
我一直在玩restlet,到目前为止我喜欢它:)
不过,我在让 restlet 客户端在 android 模拟器上工作时遇到了一些麻烦。
现在有一个在 JSE 下运行的非常简单的 restlet 服务器。它所做的只是通过 GET 方法公开一个根资源(目前只是一行文本)。我可以使用浏览器使用资源,也可以使用在控制台中运行的简单 restlet 客户端。我已经修改了 JSE 客户端的代码以尝试从 android 模拟器连接,但我无法让它工作:
package mypackage;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import org.restlet.resource.ClientResource;
import org.restlet.representation.Representation;
public class MyActivity extends Activity {
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
ClientResource res = new ClientResource( "http://server-ip:8111/" );
Representation rep = res.get();
TextView tv = new TextView( this );
try {
tv.setText( rep.getText() );
} catch ( Exception ex ) {
tv.setText( "Exception: " + ex.getMessage() );
}
setContentView( tv );
}
}
注意事项:
(1) android模拟器内置浏览器可以连接web服务并检索文本。
(2) 项目Manifest.xml文件已修改为启用使用权限INTERNET。
(3) 以下客户端使用 android 捆绑的 Apache HttpClient 库可以正常工作:
package mypackage;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
public class TestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DefaultHttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet( "http://server-ip:8111/" );
ResponseHandler<String> handler = new BasicResponseHandler();
TextView tv = new TextView( this );
try {
String content = client.execute( get, handler );
client.getConnectionManager().shutdown();
setContentView( tv );
tv.setText( content );
} catch ( Exception ex ) {
tv.setText( "Exception: " + ex.getMessage() );
}
}
}
有什么想法我可能做错了吗?
提前致谢,
迈克。
【问题讨论】:
-
“不工作”是如何表现出来的?它会抛出异常吗?返回一些东西,但不是你所期望的? ...
-
对不起,我以为我把它放在原来的帖子里了。我相信 HTTP 请求超时。有很长的延迟,然后android模拟器上弹出一个消息框,告诉我应用程序意外退出。我将尝试使用 web 调试器 (Charles) 来检查请求的外观,但我需要先弄清楚如何在 Eclipse 中设置代理 >:|
-
问题解决了吗?一种解决方法是手动注册 org.restlet.ext.httpclient 扩展以替换内部/默认 HTTP 客户端。请参阅 Restlet 用户指南: