我一直在玩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() );
}
}
}
任何想法我可能做错了什么?
提前致谢,
麦克。
答案 0 :(得分:2)
一种解决方法是手动注册org.restlet.ext.httpclient扩展以替换内部/默认HTTP客户端。请参阅Restlet用户指南: http://wiki.restlet.org/docs_2.1/13-restlet/275-restlet/266-restlet.html
最新的Restlet 2.1快照还修复了内部HTTP连接器的长期问题,可能导致意外超时。