无法将数据从android发送到PHP

时间:2013-04-21 09:27:37

标签: php android mysql

我是开发Android应用程序的新手。我需要将ID存储在WAMP服务器中。当我尝试运行我的代码时,模拟器显示“不幸myapp已停止”消息,我无法将数据从android发送到PHP。

过去两天我试图解决这个问题。我将我的活动添加到清单文件中。 这是我的.java文件:

public class MainActivity extends Activity {
    private ProgressDialog pDialog;

    JSONParser jsonParser = new JSONParser();
    EditText inputid;

    private static String url_sample = "http://localhost/android_connect/sample.php";
    // JSON Node names
    private static final String TAG_SUCCESS = "success";

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Edit Text
        inputid = (EditText) findViewById(R.id.editText1);

        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                // creating new product in background thread
                new add().execute();
            }
        });
    }

    class add extends AsyncTask<String, String,String> {
      /**
       * Before starting background thread Show Progress Dialog
       * */
       @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("your Registration is processing..wait for few sec..");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        protected String doInBackground(String... args) {
            String id = inputid.getText().toString();

            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id",id));

            // getting JSON Object
            // Note that create product url accepts POST method
            JSONObject json = jsonParser.makeHttpRequest(url_sample, "POST", params);
            // check log cat for response
            Log.d("Create Response", json.toString());

            // check for success tag
            try {
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    // successfully created product
                    Intent i = getIntent();
                    setResult(100,i);

                    // closing this screen
                    finish();
                } else {
                    // failed to create product
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            return doInBackground();
        }

       /**
        * After completing background task Dismiss the progress dialog
        * **/
        protected void onPostExecute(String file_url) {
            // dismiss the dialog once done
            pDialog.dismiss();
        }
    }
}

PHP代码是:

<?php
$response = array();
if (isset($_POST['id']))
{
    $userid = $_POST['id'];
    require_once __DIR__ . '/db_connect.php';
    $db = new DB_CONNECT();
    $result = mysql_query("INSERT INTO id(ID) VALUES('$userid')");
    echo $userid;
    if ($result) 
    {
        $response["success"] = 1;
        $response["message"] = " Registered successfully";
        echo json_encode($response);
    }
    else 
    {
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";
        echo json_encode($response);
    }
}
else 
{
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";
    echo json_encode($response);
}
?>

PHP和Android编码都没有错误.logcat显示错误消息..有些是

04-09 17:06:02.552: I/Choreographer(10719): Skipped 40 frames!  The application may be doing too much work on its main thread.

3 个答案:

答案 0 :(得分:2)

你似乎在递归地调用你的代码,在doInBackground(...)你再次调用doInBackground,也没有参数(可能会给你一个NoSuchMethodException),根据你的规范你必须返回一个字符串,但看到你没有使用结果,你也可能返回null(或将规范更改为Void)。

此外,您没有看到堆栈跟踪的原因是您可能正在过滤log语句,而e。printStackTrace()不使用日志语句。

修改 请用 Log.e("MyActivityNameHere", e.toString())代替e.prinStackTrace()查看例外

答案 1 :(得分:0)

由于行

,您收到错误消息
    return doInBackground();

你以递归方式调用doInBackground()方法,这会给线程带来繁重的工作量。

尝试返回一些字符串(在您的情况下,只返回null;)

答案 2 :(得分:0)

如果您使用的是localhost,那么您应该像这样调用网址

      private static String url_sample = "http://10.0.2.2/android_connect/sample.php";