2012-02-15 94 views
4

我有一个有很多通信的android应用程序。我想这样的如何在REPL中运行android代码

HttpClient client = new DefaultHttpClient(); 
print(client.execute(new HttpGet("some url"), new BasicResponseHandler())); 

通过这种方式,我可以看到我的变化非常快的内部REPL Android上运行的代码,开发,调试等

,不会对手机或模拟器中运行。

我试着将android.jar添加到beanshell,但它不能这样工作。

回答

6

由于android.jar中的方法都是存根,您将无法在REPL中运行属于Android平台的类(例如HttpClient)。这些方法的真正实现驻留在手机或模拟器上,因此您必须至少运行模拟器。

有关更多详细信息,请参见Apache DefaultHttpClient invocation results in "java.lang.RuntimeException: Stub!"

例如,如果您运行的REPL发布的代码,你会得到类似下面的一个RuntimeException:

java.lang.RuntimeException: Stub! 
    at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:5) 
    at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:7) 
    at CodeSnippet_10.run(CodeSnippet_10.java:7) 
    at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain1.eval(ScrapbookMain1.java:20) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.evalLoop(ScrapbookMain.java:54) 
    at org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain.main(ScrapbookMain.java:35) 

如果你想亲眼验证这一点,创建一个新的Eclipse中的Java项目,然后在您的项目中创建一个新的剪贴簿页面(File > New > Other... > Java Run/Debug > Scrapbook Page)。将android.jar添加到项目的构建路径,然后右键单击剪贴簿页面,选择Set Imports并导入org.apache.http.*包。当你执行片段(Ctrl + U)时,你会得到一个类似于我上面发布的异常。