在这篇文章中,我们将为您详细介绍Android上的Thrift客户端的内容,并且讨论关于thrift客户端的相关问题。此外,我们还会涉及一些关于androidFTP客户端开发、androidrest客
在这篇文章中,我们将为您详细介绍Android上的Thrift客户端的内容,并且讨论关于thrift 客户端的相关问题。此外,我们还会涉及一些关于android FTP客户端开发、android rest客户端不支持的媒体类型、Android REST客户端:最佳解决方案?、android websocket客户端超时的知识,以帮助您更全面地了解这个主题。
本文目录一览:- Android上的Thrift客户端(thrift 客户端)
- android FTP客户端开发
- android rest客户端不支持的媒体类型
- Android REST客户端:最佳解决方案?
- android websocket客户端超时
Android上的Thrift客户端(thrift 客户端)
我是android开发的新手,并希望使用Thrift客户端创建一个应用,该客户端在我的网络上使用Thrift服务器。我已经获得了Thrift定义文件和Thrift编译器生成的Java代码。
我该如何开始?如何将旧版库添加到我的项目中?我需要自己编译吗?如果是,我应该如何做到这一点以使其与Android兼容?
我可以直接使用类似于此功能的自动生成的功能吗
public void getProduct(int productID, org.apache.thrift.async.AsyncMethodCallback resultHandler)
对我的服务进行异步调用,以便我遵循android最佳实践?还是使用此功能以任何方式阻止了我的应用程序,还是在Android上有另一种方法可供选择呢?
我使用的是Google ADT(日食)的当前版本。我的应用程序需要仅在android 4+设备上运行(我将minSdkVersion设置为15
)。
答案1
小编典典是的,您需要自己构建适用于Android的Thrift-lib。Android拥有自己的httpcore,没有消费方法。在这里,您可以找到如何更改节俭库的方法:here指令 之后,只需将jar文件添加到libs-folder并将其添加到构建路径。
例
THttpClient hclient = new THttpClient("your/endpoint/url");
TProtocol protocol = new TBinaryProtocol(hclient); // it depends on your data-format
Service.Client client = new Service.Client(protocol);
Product product = client.getProduct(int productID);
你需要执行它作为一个Android的AsyncTask:的AsyncTask |
Android开发人员
android FTP客户端开发
昨天,我升了android的新ADT tools.结果我原来的ftp客户端本可运行文件的都不正常了.在new FTPClinet()时发现. java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient.我重新导入外部jar,添加CLASSPATH路径.结果都无效.求哪位大侠指点迷津?程序很简单,就在new时出问题android rest客户端不支持的媒体类型
415 Unsupported Media Type.
客户代码:
public JSONtest() throws Exception,IOException{ HttpPost request = new HttpPost(AppServerIP); JSONObject param = new JSONObject(); param.put("name","weiping"); param.put("password","123456"); StringEntity se = new StringEntity(param.toString()); request.setEntity(se); HttpResponse httpResponse = new DefaultHttpClient().execute(request); String retSrc = EntityUtils.toString(httpResponse.getEntity()); System.out.println(httpResponse.getStatusLine().getReasonPhrase()); }
服务器的代码:
public class resource { @POST @Path("/trigger") @Consumes(MediaType.APPLICATION_JSON) public Response trigger(JSONObject notify) throws Exception{ return Response.status(Response.Status.OK).entity("134124").tag("213q").type(MediaType.APPLICATION_JSON).build(); }
解决方法
在客户端代码中尝试这样的事情:
request.setHeader(“Content-Type”,“application / json”);
Android REST客户端:最佳解决方案?
我找到答案:Android REST client,Sample?
但它是2012年.
是否有一个我可以遵循的教程(以及您建议的)以获得一个小的工作示例项目?
提前致谢.
https://square.github.io/retrofit/ 它易于使用,你几乎不必关心json反序列化
android websocket客户端超时
背景:
我正在为服务器开发一个Android客户端,其中需求是app,需要与基于WebSockets的服务器来回连续交换消息.
实现:对于客户端,我使用适用于Android的weberknecht’s WebSocket客户端库,而服务器是基于Tornado的.
问题:
目前,我通过生成AsyncTask来调用onCreate中的initWebSocketClient.但是,我一直收到客户端超时异常.
Android客户端:
private void initWebSocketClient() { Log.e(TAG,"initWebSocketClient"); try { URI url = new URI("ws://192.168.207.84:8080/"); WebSocket websocket = new WebSocketConnection(url); // Register Event Handlers websocket.setEventHandler(new WebSocketEventHandler() { public void onopen() { Log.e(TAG,"--open"); } public void onMessage(WebSocketMessage message) { Log.e(TAG,"--received message: " + message.getText()); } public void onClose() { Log.e(TAG,"--close"); } }); // Establish WebSocket Connection websocket.connect(); // Send UTF-8 Text websocket.send("hello world"); // Close WebSocket Connection websocket.close(); } catch (WebSocketException wse) { wse.printstacktrace(); } catch (URISyntaxException use) { use.printstacktrace(); } }
龙卷风服务器:
#!/usr/bin/env python import tornado.ioloop import tornado.web import tornado.websocket class EchoWebSocketHandler(tornado.websocket.WebSocketHandler): def open(self): print "WebSocket opened" def on_message(self,message): self.write_message(u"You said: " + message) def on_close(self): print "WebSocket closed" application = tornado.web.Application([ (r"/",EchoWebSocketHandler),]) if __name__ == "__main__": application.listen(8080) tornado.ioloop.IOLoop.instance().start()
客户超时例外:
01-31 19:28:01.367: W/System.err(5668): de.roderick.weberknecht.WebSocketException: error while creating socket to ws://192.168.207.84:8080/ 01-31 19:28:01.386: W/System.err(5668): at de.roderick.weberknecht.WebSocketConnection.createSocket(WebSocketConnection.java:244) 01-31 19:28:01.386: W/System.err(5668): at de.roderick.weberknecht.WebSocketConnection.connect(WebSocketConnection.java:83) 01-31 19:28:01.386: W/System.err(5668): at com.sagar.websockclient.MainActivity.initWebSocketClient(MainActivity.java:55) 01-31 19:28:01.390: W/System.err(5668): at com.sagar.websockclient.MainActivity.access$0(MainActivity.java:30) 01-31 19:28:01.390: W/System.err(5668): at com.sagar.websockclient.MainActivity$WebSocketTask.doInBackground(MainActivity.java:75) 01-31 19:28:01.390: W/System.err(5668): at com.sagar.websockclient.MainActivity$WebSocketTask.doInBackground(MainActivity.java:1) 01-31 19:28:01.390: W/System.err(5668): at android.os.AsyncTask$2.call(AsyncTask.java:264) 01-31 19:28:01.390: W/System.err(5668): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 01-31 19:28:01.390: W/System.err(5668): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 01-31 19:28:01.390: W/System.err(5668): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 01-31 19:28:01.390: W/System.err(5668): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 01-31 19:28:01.390: W/System.err(5668): at java.lang.Thread.run(Thread.java:856) 01-31 19:28:01.390: W/System.err(5668): Caused by: java.net.ConnectException: Failed to connect to /192.168.207.84 (port 8080): connect Failed: ETIMEDOUT (Connection timed out) 01-31 19:28:01.390: W/System.err(5668): at libcore.io.IoBridge.connect(IoBridge.java:114) 01-31 19:28:01.394: W/System.err(5668): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 01-31 19:28:01.394: W/System.err(5668): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 01-31 19:28:01.394: W/System.err(5668): at java.net.socket.startupSocket(Socket.java:566) 01-31 19:28:01.394: W/System.err(5668): at java.net.socket.tryAllAddresses(Socket.java:127) 01-31 19:28:01.394: W/System.err(5668): at java.net.socket.(Socket.java:177) 01-31 19:28:01.394: W/System.err(5668): at java.net.socket.(Socket.java:149) 01-31 19:28:01.394: W/System.err(5668): at de.roderick.weberknecht.WebSocketConnection.createSocket(WebSocketConnection.java:238) 01-31 19:28:01.394: W/System.err(5668): ... 11 more 01-31 19:28:01.394: W/System.err(5668): Caused by: libcore.io.ErrnoException: connect Failed: ETIMEDOUT (Connection timed out) 01-31 19:28:01.398: W/System.err(5668): at libcore.io.Posix.connect(Native Method) 01-31 19:28:01.398: W/System.err(5668): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 01-31 19:28:01.398: W/System.err(5668): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 01-31 19:28:01.398: W/System.err(5668): at libcore.io.IoBridge.connect(IoBridge.java:112) 01-31 19:28:01.398: W/System.err(5668): ... 18 more
有人可以帮帮我吗?
更新:添加AutoBahn(适用于Android的WebSocket客户端库)实现细节:
AutoBahn客户端
private void connect2() { mConnection = new WebSocketConnection(); final String wsuri = "ws://192.168.0.137:8888/"; String TAG = "ArticlesListActivity"; try { mConnection.connect(wsuri,new WebSocketHandler() { @Override public void onopen() { Log.e(TAG,"Connected to: " + wsuri); } @Override public void onTextMessage(String payload) { Log.e(TAG,"Message recieved = " + payload); } @Override public void onClose(int code,String reason) { Log.e(TAG,"Connection Lost."); } }); } catch (WebSocketException e) { Log.d(TAG,e.toString()); } }
使用此库 – 我能够立即连接到服务器,连接丢失. (请参阅下面的“AutoBahn客户端日志”.切换回weberknecht工作正常.我没有明确地在任何地方调用mConnection.disconnect().所以我不知道连接是如何终止的.
AutoBahn客户端日志
02-27 14:27:36.605: D/de.tavendo.autobahn.WebSocketConnection(27701): created 02-27 14:27:36.656: D/dalvikvm(27701): GC_FOR_ALLOC freed 164K,4% free 9247K/9543K,paused 17ms 02-27 14:27:36.671: D/dalvikvm(27701): GC_FOR_ALLOC freed 7K,4% free 9368K/9735K,paused 14ms 02-27 14:27:36.671: D/de.tavendo.autobahn.WebSocketReader(27701): created 02-27 14:27:36.675: D/de.tavendo.autobahn.WebSocketConnection(27701): WS reader created and started 02-27 14:27:36.675: D/de.tavendo.autobahn.WebSocketReader(27701): running 02-27 14:27:36.675: D/de.tavendo.autobahn.WebSocketWriter(27701): created 02-27 14:27:36.675: D/de.tavendo.autobahn.WebSocketConnection(27701): WS writer created and started 02-27 14:27:36.769: D/de.tavendo.autobahn.WebSocketReader(27701): run() : ConnectionLost 02-27 14:27:36.773: D/de.tavendo.autobahn.WebSocketReader(27701): ended 02-27 14:27:36.777: D/de.tavendo.autobahn.WebSocketConnection(27701): opening handshake received 02-27 14:27:36.777: E/ArticlesListActivity(27701): Connected to: ws://192.168.0.137:8888/ 02-27 14:27:36.781: D/de.tavendo.autobahn.WebSocketConnection(27701): fail connection [code = 3,reason = WebSockets connection lost 02-27 14:27:36.784: D/de.tavendo.autobahn.WebSocketReader(27701): quit 02-27 14:27:36.788: D/de.tavendo.autobahn.WebSocketWriter(27701): ended 02-27 14:27:36.792: E/ArticlesListActivity(27701): Connection Lost. 02-27 14:27:36.792: D/de.tavendo.autobahn.WebSocketConnection(27701): worker threads stopped
解决方法
>您是否尝试在手机(设备)或模拟器上执行此操作?如果您尝试在手机上执行此操作并通过3G连接,则不会发生这种情况.在这种情况下,您尝试从WAN连接到无法正常工作的内部IP地址.
>再次假设您在设备上执行此操作,如果您通过Wifi连接,那么这是另一个故事.确保可以通过192.168.207.84:8080联系服务器.一种快速测试连接的方法(来自您的PC):
telnet 192.168.207.84 8080
如果超时,您知道您的服务器没有响应.当然,这假设您的PC与Wifi网络位于同一子网中.
>如果您尝试从模拟器执行此操作,请按照[2]中的步骤确保服务器可访问,并确保模拟器处于(IP)桥接模式.
总而言之,超时通常发生的主要原因是缺乏服务器可用性(即缺乏连接性).您没有提到网络的详细信息,因此我根据您尝试连接的IP(192.168.207.84)做了一些假设.
我们今天的关于Android上的Thrift客户端和thrift 客户端的分享就到这里,谢谢您的阅读,如果想了解更多关于android FTP客户端开发、android rest客户端不支持的媒体类型、Android REST客户端:最佳解决方案?、android websocket客户端超时的相关信息,可以在本站进行搜索。
本文标签: