Java 过帐导致错误的数据

Java 过帐导致错误的数据,java,php,android,Java,Php,Android,我试图做一个非常简单的文章,从一个android应用程序到一个php脚本,它将更新一个数据库。不幸的是,这在第52行给了我一个调试器错误(eclipse)。代码如下: package com.example.testhttppost; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apa

我试图做一个非常简单的文章,从一个android应用程序到一个php脚本,它将更新一个数据库。不幸的是,这在第52行给了我一个调试器错误(eclipse)。代码如下:

package com.example.testhttppost;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void updateDiscountTable(View view)
    {
        // Create a new HttpClient and Post Header
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://www.test.com/jsonpost.php");

        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("id", "12345"));
            nameValuePairs.add(new BasicNameValuePair("shop", "ZARA"));
            nameValuePairs.add(new BasicNameValuePair("discount", "20%"));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);    //Line 52

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
    }
}
package com.example.testhttppost;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.HttpResponse;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.view;
公共类MainActivity扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
public void updateDiscoveryTable(视图)
{
//创建一个新的HttpClient和Post头
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://www.test.com/jsonpost.php");
试一试{
//添加您的数据
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“id”,“12345”);
添加(新的BasicNameValuePair(“商店”、“ZARA”);
添加(新的BasicNameValuePair(“折扣”,“20%”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpclient.execute(httppost);//第52行
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
}捕获(IOE异常){
//TODO自动生成的捕捉块
}
}
}
PHP脚本是:

<?php
    // PHP variable to store the host address
     $db_host  = "localhost";
     // PHP variable to store the username
     $db_uid  = "dsdsdsv_android";
     // PHP variable to store the password
     $db_pass = "test1234";
     // PHP variable to store the Database name  
     $db_name  = "dsdsdsv_android"; 
            // PHP variable to store the result of the PHP function 'mysql_connect()' which establishes the PHP & MySQL connection  
     $db_con = mysql_connect($db_host,$db_uid,$db_pass) or die('could not connect');
     mysql_select_db($db_name);

     $shopId = $_POST['id'];
     $shopName = $_POST['shop'];
     $discount = $_POST['discount'];

     mysql_query("insert into discounts(id, shop, discount) values ($shopId, $shopName, $discount)");
//  mysql_query("insert into discounts(id, shop, discount)values(121, 'sadsdas','dasdasdsa')");

?>

您可能正在主应用程序线程上执行网络操作。您需要将其移动到后台线程。你可以用


您需要。

07-13 20:39:35.531:E/AndroidRuntime(12708):位于com.example.testhttppost.MainActivity.UpdateDiscoveryTable(MainActivity.java:52)NewWorkonMainThreadException。使用AsyncTask我不确定代码发布是否正确,因为我是从网上复制的,几乎没有修改。发现了什么??您提到要更新数据库,但您只使用insert。如果该密钥的数据已经存在,该怎么办?同意,但当了解到它不存在时。我试图查看代码片段的输出,以了解其功能。这不是生产代码,但为什么它将带有响应对象的行显示为错误行?在测试中不能忽略这一点吗?我知道它会影响平滑度,但功能如何?