【发布时间】:2014-02-07 12:18:17
【问题描述】:
如何将用户输入 (Edittext) 传递到服务器上的 php 脚本?我试图首先通过 wamp 在本地工作。我已允许 wamp conf 文件中的所有连接,并为我在 www 文件夹中使用的文件夹创建了一个别名。我的代码如下:
public class GetItemsActivity extends FoodSearchActivity {
public void postData(View v) {
//get food from edit text box
String food = txtFoodSearch.getText().toString();
System.out.println(food); //see if user input is being picked up
if(food.length()>0) {
// Create a new HttpClient
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("000.000.000.00/SlimandSave/test.php"); //use address of local web server
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("Food", "food"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
txtFoodSearch.setText(" "); //reset the message text field
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
} else {
//display message if text field is empty
Toast.makeText(getBaseContext(),"All fields are required",Toast.LENGTH_SHORT).show();
}
}
}
现在我只想能够发布数据,所以我的 php 只是将搜索文本输出到文本文件;
file_put_contents("myfile.txt", print_r( $_POST, true ));
?>
我一直在这里查看一些问题,现在我不确定我是否应该使用 asynctask,或者我是否遗漏了一些明显的东西。也许是php?我感谢任何提示/建议。
编辑:我刚刚发现,如果我将编辑文本字段留空,当我点击搜索时,应用程序仍然会崩溃,所以现在不知道该去哪里看
进一步编辑:我还刚刚发现我从未将活动添加到按钮单击的清单中,因此应用程序在单击按钮后不再挂起和崩溃。
我现在从日志中得到这个,
02-13 15:39:16.826: E/EditText(26019): bread
02-13 15:39:16.876: E/AndroidRuntime(26019): FATAL EXCEPTION: main
02-13 15:39:16.876: E/AndroidRuntime(26019): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.college.slimandsave/com.college.slimandsave.GetItemsActivity}: java.lang.ClassCastException: com.college.slimandsave.GetItemsActivity cannot be cast to android.app.Activity
02-13 15:39:16.876: E/AndroidRuntime(26019): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2024)
02-13 15:39:16.876: E/AndroidRuntime(26019): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
02-13 15:39:16.876: E/AndroidRuntime(26019): at android.app.ActivityThread.access$600(ActivityThread.java:140)
02-13 15:39:16.876: E/AndroidRuntime(26019): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
02-13 15:39:16.876: E/AndroidRuntime(26019): at android.os.Handler.dispatchMessage(Handler.java:99)
02-13 15:39:16.876: E/AndroidRuntime(26019): at android.os.Looper.loop(Looper.java:137)
02-13 15:39:16.876: E/AndroidRuntime(26019): at android.app.ActivityThread.main(ActivityThread.java:4898)
02-13 15:39:16.876: E/AndroidRuntime(26019): at java.lang.reflect.Method.invokeNative(Native Method)
02-13 15:39:16.876: E/AndroidRuntime(26019): at java.lang.reflect.Method.invoke(Method.java:511)
02-13 15:39:16.876: E/AndroidRuntime(26019): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
02-13 15:39:16.876: E/AndroidRuntime(26019): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
02-13 15:39:16.876: E/AndroidRuntime(26019): at dalvik.system.NativeStart.main(Native Method)
02-13 15:39:16.876: E/AndroidRuntime(26019): Caused by: java.lang.ClassCastException: com.college.slimandsave.GetItemsActivity cannot be cast to android.app.Activity
02-13 15:39:16.876: E/AndroidRuntime(26019): at android.app.Instrumentation.newActivity(Instrumentation.java:1057)
02-13 15:39:16.876: E/AndroidRuntime(26019): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2015)
02-13 15:39:16.876: E/AndroidRuntime(26019): ... 11 more
终于让它工作了。在上面的代码中,我不得不使用 txtFoodSearch.getText().toString() 而不仅仅是食物,而且我只是使用我的 wamp 服务器的 ip,我需要将 http:// 添加到 ip 地址,感谢任何建议。
【问题讨论】:
-
nameValuePairs.add(new BasicNameValuePair("Food", food));
-
nameValuePairs.add(new BasicNameValuePair("Food", food));对于第一次测试,您甚至可以使用 new Thread()。
-
谢谢伙计们,我没有发现,但是当我点击搜索时,应用程序只是挂起,然后仍然崩溃。
标签: php android post android-asynctask