【发布时间】:2017-10-05 21:35:45
【问题描述】:
我是 android 开发的新手,我正在尝试为一个让用户订购食物的类项目制作一个 android 应用程序。一旦他们点击结帐按钮,就会有一个包含用户订单信息的字符串值(即 - 鸡肉三明治、西红柿、生菜、蛋黄酱、特殊说明,总计:5.99 美元)传递给下一个活动。但是,我还希望将这些信息从应用程序发送到网站,以便查看网页的人可以看到订单信息。解决此问题的最佳方法是什么?
我想出了如何使用 MySQL 和 phpmyadmin 处理用户登录/注册,但我不确定是否为这个特定的字符串再次这样做是显示食品订单的最佳方式。我不打算专门为一个字符串创建数据库。相反,我只想在网页上发布该订单信息,以便“员工”可以查看订单信息并开始处理食品订单。
我从这篇文章中找到了一些信息:How to send a data to a web server from Android
根据我从该帖子中发现的内容,这是我迄今为止所尝试的: 订单列表活动:
@Override
public void onClick(View v) {
Intent myIntent = null;
switch (v.getId()) {
case R.id.checkout:
if (MainActivity.amountBalance - orderPrice < 0) {
Toast.makeText(Orderlist.this, "Insufficient balance!", Toast.LENGTH_SHORT).show();
} else {
MainActivity.amountBalance = MainActivity.amountBalance - orderPrice;
myIntent = new Intent(Orderlist.this, OrderPlaced.class);
Toast.makeText(getApplicationContext(),"Your order was placed!",Toast.LENGTH_LONG).show();
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://mywebsitename.com/mypage.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
nameValuePairs.add(new BasicNameValuePair("orderinfo", "Chicken sandwich: tomatoes, onions, cheese.\nTotal: $5.99."));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
startActivity(i);
}
break;
case R.id.cancel:
i = new Intent(Orderlist.this, MainActivity.class);
Toast.makeText(Orderlist.this, "All items have been removed from cart.", Toast.LENGTH_LONG).show();
startActivity(i);
break;
}
}
我的页面.php
<?php
$filename="datatest.html";
file_put_contents($filename,$_POST["orderinfo"]."<br />",FILE_APPEND);
$msg=file_get_contents($filename);
echo $msg; ?>
不幸的是,这会导致我的代码崩溃并且不会向 mypage.php 发布任何内容。我该如何解决这个问题?
错误:
致命异常:主要
进程:com.example.kusha.finalproject,PID:5291
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86)
at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
at java.net.InetAddress.getAllByName(InetAddress.java:752)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:142)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:366)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
at com.example.kusha.finalproject.Orderlist.onClick(Orderlist.java:192)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
-- 错误似乎来自 Orderlist.java:192,这是这里的这段代码:
nameValuePairs.add(new BasicNameValuePair("orderinfo", "Chicken sandwich:
tomatoes, onions, cheese.\nTotal: $5.99."));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost); //ERROR FROM HERE
谢谢!
【问题讨论】:
-
展示努力。分享您的代码。
-
抱歉,我刚刚编辑了我的帖子。立即检查。
-
是的,就像下面所说的漂亮微笑,您可以选择执行 GET 或 POST。我更喜欢 Volley,但首先:您是否在 Manifest.XML 上的 Application 标记之前说明了必要的说明
<uses-permission android:name="android.permission.INTERNET" />和<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />? -
感谢您的回复。是的,我已将该权限添加到清单中
-
很好,那么,请尝试发布您的堆栈跟踪以供我们查看(发生崩溃时您的 logcat)。谢谢。
标签: php android mysql string web