Php 无法将HTTP请求发送到后端服务器
我正在开发一个android应用程序,将HTTP数据发送到虚拟机中的后端服务器Php 无法将HTTP请求发送到后端服务器,php,android,Php,Android,我正在开发一个android应用程序,将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
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);
?>
修改应用程序后logcat中显示的消息:
07-18 17:35:05.899: E/WindowManager(28043): Activity android.reader.Reader has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@416c3630 that was originally added here
07-18 17:35:05.899: E/WindowManager(28043): android.view.WindowLeaked: Activity android.reader.Reader has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@416c3630 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)
07-18 17:35:05.899:E/WindowManager(28043):活动android.reader.reader泄漏了window com.android.internal.policy.impl.PhoneWindow$DecorView@416c3630原来是加在这里的
07-18 17:35:05.899:E/WindowManager(28043):android.view.WindowLeaked:Activity android.reader.reader已泄漏window com.android.internal.policy.impl.PhoneWindow$DecorView@416c3630原来是加在这里的
07-18 17:35:05.899:E/WindowManager(28043):在android.view.ViewRootImpl。(ViewRootImpl.java:344)
07-18 17:35:05.899:E/WindowManager(28043):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
07-18 17:35:05.899:E/WindowManager(28043):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
07-18 17:35:05.899:E/WindowManager(28043):在android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
07-18 17:35:05.899:E/WindowManager(28043):在android.view.Window$LocalWindowManager.addView(Window.java:537)
07-18 17:35:05.899:E/WindowManager(28043):在android.app.Dialog.show(Dialog.java:278)
07-18 17:35:05.899:E/WindowManager(28043):在android.reader.reader$GrabURL.onPreExecute(reader.java:219)
07-18 17:35:05.899:E/WindowManager(28043):在android.reader.reader$1.onClick(reader.java:101)
07-18 17:35:05.899:E/WindowManager(28043):在android.view.view.performClick(view.java:3511)上
07-18 17:35:05.899:E/WindowManager(28043):在android.view.view$PerformClick.run(view.java:14105)
07-18 17:35:05.899:E/WindowManager(28043):在android.os.Handler.handleCallback(Handler.java:605)
07-18 17:35:05.899:E/WindowManager(28043):在android.os.Handler.dispatchMessage(Handler.java:92)
07-18 17:35:05.899:E/WindowManager(28043):位于android.os.Looper.loop(Looper.java:137)
07-18 17:35:05.899:E/WindowManager(28043):位于android.app.ActivityThread.main(ActivityThread.java:4424)
07-18 17:35:05.899:E/WindowManager(28043):位于java.lang.reflect.Method.Invokenactive(本机方法)
07-18 17:35:05.899:E/WindowManager(28043):位于java.lang.reflect.Method.invoke(Method.java:511)
07-18 17:35:05.899:E/WindowManager(28043):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-18 17:35:05.899:E/WindowManager(28043):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-18 17:35:05.899:E/WindowManager(28043):在dalvik.system.NativeStart.main(本机方法)
07-18 17:35:05.899:D/OpenGLRenderer(28043):刷新缓存(模式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线程上执行网络相关操作。因此,按照我在第三步中的建议,使用此操作
我回答的第三步
将您的所有HttpRequest代码放入AsyncYAsk的doInBackGround()
首先,您的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线程上执行网络相关操作。因此,按照我在第三步中的建议,使用此操作
我回答的第三步
将所有HttpRequest代码放入AsyncYAsk的doInBackGround()
清单文件中是否包含INTERNET权限?日志中是否有任何内容?你设置了正确的权限吗?你是说logcat,没有显示任何内容,我不知道为什么,互联网权限?我没有添加它,因为我是android应用程序的初学者,我曾经认为它可以随心所欲地访问互联网。让我先试一试,谢谢您使用的是哪种API级别?Logcat
中有任何错误吗?我刚刚将设备重新连接到桌面并重试,当我尝试发送数据时,Logcat中出现错误消息,如果您在清单文件中包含INTERNET权限,我将在上面发布它。您在日志中看到了什么吗?你设置了正确的权限吗?你是说logcat,没有显示任何内容,我不知道为什么,互联网权限?我没有添加它,因为我是android应用程序的初学者,我曾经认为它可以随心所欲地访问互联网。让我先试一试,谢谢您使用的是哪种API级别?Logcat
中有任何错误吗?我刚刚将设备重新连接到桌面并重试,当我尝试发送数据时,Logcat中出现错误消息,我将在上面发布。因此,您的意思是我必须创建AsyncTAsk类来处理请求吗?是的。因为您正在阻止Web请求上应用程序的MainUI线程