无法发送HTTP请求到后端服务器
我开发一个机器人应用HTTP数据发送到其被保持在虚拟机的后端服务器。无法发送HTTP请求到后端服务器
try{
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("192.168.1.150/application/check.php");
params.add(new BasicNameValuePair("device", Build.SERIAL));
params.add(new BasicNameValuePair("person", "A"));
UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params,HTTP.UTF_8);
post.setEntity(ent);
HttpResponse responsePOST = client.execute(post);
HttpEntity resEntity = responsePOST.getEntity();
if (resEntity != null) {
Log.i("RESPONSE",EntityUtils.toString(resEntity));
}
} catch (Exception e) {
e.printStackTrace();
}
而下方则是PHP代码:
<?php
$file = "C:/wamp/www/application/file.txt";
$data = "device:".$_POST['device']." person:".$_POST['person'];
file_put_contents($file, $data);
?>
但是,文件不能被创建,因为我看不到输出,所以我无法找出应用程序是否能够成功连接到后端服务器或不。我的移动设备和服务器机器都在同一个wifi网络中,所以通过输入虚拟地址,它应该能够让我的应用连接到服务器,不是吗?
下面是在logcat的错误消息:
07-18 16:36:06.407: W/System.err(24598): android.os.NetworkOnMainThreadException
07-18 16:36:06.415: W/System.err(24598): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
07-18 16:36:06.415: W/System.err(24598): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
07-18 16:36:06.415: W/System.err(24598): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
07-18 16:36:06.415: W/System.err(24598): at libcore.io.IoBridge.connect(IoBridge.java:112)
07-18 16:36:06.415: W/System.err(24598): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
07-18 16:36:06.415: W/System.err(24598): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
07-18 16:36:06.415: W/System.err(24598): at java.net.Socket.connect(Socket.java:842)
07-18 16:36:06.415: W/System.err(24598): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
07-18 16:36:06.415: W/System.err(24598): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
07-18 16:36:06.415: W/System.err(24598): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
07-18 16:36:06.415: W/System.err(24598): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
07-18 16:36:06.415: W/System.err(24598): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
07-18 16:36:06.415: W/System.err(24598): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
07-18 16:36:06.415: W/System.err(24598): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
07-18 16:36:06.423: W/System.err(24598): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
07-18 16:36:06.423: W/System.err(24598): at android.reader.Reader$1.onClick(Reader.java:106)
07-18 16:36:06.423: W/System.err(24598): at android.view.View.performClick(View.java:3511)
07-18 16:36:06.423: W/System.err(24598): at android.view.View$PerformClick.run(View.java:14105)
07-18 16:36:06.423: W/System.err(24598): at android.os.Handler.handleCallback(Handler.java:605)
07-18 16:36:06.423: W/System.err(24598): at android.os.Handler.dispatchMessage(Handler.java:92)
07-18 16:36:06.423: W/System.err(24598): at android.os.Looper.loop(Looper.java:137)
07-18 16:36:06.423: W/System.err(24598): at android.app.ActivityThread.main(ActivityThread.java:4424)
07-18 16:36:06.423: W/System.err(24598): at java.lang.reflect.Method.invokeNative(Native Method)
07-18 16:36:06.423: W/System.err(24598): at java.lang.reflect.Method.invoke(Method.java:511)
07-18 16:36:06.423: W/System.err(24598): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-18 16:36:06.423: W/System.err(24598): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-18 16:36:06.423: W/System.err(24598): at dalvik.system.NativeStart.main(Native Method)
消息显示logcat中后,我修改程序:
07-18 17:35:05.899: E/WindowManager(28043): Activity android.reader.Reader has leaked window [email protected] that was originally added here
07-18 17:35:05.899: E/WindowManager(28043): android.view.WindowLeaked: Activity android.reader.Reader has leaked window [email protected] that was originally added here
07-18 17:35:05.899: E/WindowManager(28043): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344)
07-18 17:35:05.899: E/WindowManager(28043): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
07-18 17:35:05.899: E/WindowManager(28043): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
07-18 17:35:05.899: E/WindowManager(28043): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
07-18 17:35:05.899: E/WindowManager(28043): at android.view.Window$LocalWindowManager.addView(Window.java:537)
07-18 17:35:05.899: E/WindowManager(28043): at android.app.Dialog.show(Dialog.java:278)
07-18 17:35:05.899: E/WindowManager(28043): at android.reader.Reader$GrabURL.onPreExecute(Reader.java:219)
07-18 17:35:05.899: E/WindowManager(28043): at android.reader.Reader$1.onClick(Reader.java:101)
07-18 17:35:05.899: E/WindowManager(28043): at android.view.View.performClick(View.java:3511)
07-18 17:35:05.899: E/WindowManager(28043): at android.view.View$PerformClick.run(View.java:14105)
07-18 17:35:05.899: E/WindowManager(28043): at android.os.Handler.handleCallback(Handler.java:605)
07-18 17:35:05.899: E/WindowManager(28043): at android.os.Handler.dispatchMessage(Handler.java:92)
07-18 17:35:05.899: E/WindowManager(28043): at android.os.Looper.loop(Looper.java:137)
07-18 17:35:05.899: E/WindowManager(28043): at android.app.ActivityThread.main(ActivityThread.java:4424)
07-18 17:35:05.899: E/WindowManager(28043): at java.lang.reflect.Method.invokeNative(Native Method)
07-18 17:35:05.899: E/WindowManager(28043): at java.lang.reflect.Method.invoke(Method.java:511)
07-18 17:35:05.899: E/WindowManager(28043): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-18 17:35:05.899: E/WindowManager(28043): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-18 17:35:05.899: E/WindowManager(28043): at dalvik.system.NativeStart.main(Native Method)
07-18 17:35:05.899: D/OpenGLRenderer(28043): Flushing caches (mode 1)
首先,你HtttpPost
请求URL ..
HttpPost post = new HttpPost("192.168.1.150/application/check.php");
应该是这样的,
HttpPost post = new HttpPost("http://192.168.1.150/application/check.php");
现在,第二,检查应用程序的清单文件的权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
第三个,
放入后台线程您完整的Web请求的代码或的AsyncTask的doInBackGround()
没有在应用程序的MainUI线程。
终于之后,从您的Http请求检查响应,你做了什么..
此外,如果可能的调试你的Web请求的代码,所以你可以找到怎么回事错..
解决方案:
从您的logcat的错误,我们得出结论:你想网络相关操作您的活动的MainUI Thread
。因此,我建议您在第三步中使用AsyncTask进行此操作。
我的回答的第三步。
把你的全部HttpRequest代码在AsyncYAsk's doInBackGround()
。
另一件事...在后台线程中的代码上方运行。 :) – 2012-07-18 08:35:04
@MMohsinNaeem - 我更新了我的答案。谢谢.. – user370305 2012-07-18 08:37:47
那么你的意思是我必须创建一个AsyncTAsk类来处理请求? – Conrad 2012-07-18 08:44:51
你是否在清单文件中包含了INTERNET权限? – adatapost 2012-07-18 08:25:51
你在日志中看到什么吗?你是否设置了正确的权限? – Tomer 2012-07-18 08:26:24
你的意思是logcat,没有任何显示,我不知道为什么,INTERNET权限?我没有添加它,因为我是Android应用程序的初学者,我曾经认为它可以按照需要访问互联网。首先让我试试看,谢谢 – Conrad 2012-07-18 08:29:39