如何在REPL中运行android代码
作者:互联网
我有一个很多通信的Android应用程序.我想在REPL中运行android代码,用于开发,调试等
像这样
HttpClient client = new DefaultHttpClient();
print(client.execute(new HttpGet("some url"), new BasicResponseHandler()));
通过这种方式,我可以非常快速地看到我的变化,而无需在手机或模拟器上运行.
我试图将android.jar添加到beanshell中,但它不会那样工作.
解决方法:
您将无法在REPL中运行属于Android平台(例如HttpClient)的类,因为android.jar中的方法都是存根.这些方法的实际实现驻留在您的手机或模拟器上,因此您必须至少运行模拟器.
有关详细信息,请参见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项目,然后在项目中创建一个新的剪贴簿页面(文件>新建>其他…> Java运行/调试>剪贴簿页面).将android.jar添加到项目的构建路径,然后右键单击剪贴簿页面,选择Set Imports并导入org.apache.http.*包.当您执行代码段(Ctrl U)时,您将收到类似于我上面发布的异常的异常.
标签:android,read-eval-print-loop 来源: https://codeday.me/bug/20190530/1184446.html