gpt4 book ai didi

php - Android 和 PHP : POST-ing data from Android to mysql db using PHP

转载 作者:行者123 更新时间:2023-11-29 18:22:26 26 4
gpt4 key购买 nike

我需要将登录/注册数据从 Android 应用程序传递到本地主机上的 mysql 数据库。我仍在学习过程中,上周遇到了这个问题。我在 Stack Overflow 上阅读了数十页、问题和答案,并尝试了一切,但我就是无法让它发挥作用。你能指出我的代码中的问题吗,我对 php 和 JSON 仍然是新手。

Android、Activity 和 AsyncTask 类:

package com.example.mario.datadrivenassignmenttwo;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

public class DbManager extends Activity {

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

public void register(View v) {
EditText uname = (EditText) findViewById(R.id.username);
EditText pw = (EditText) findViewById(R.id.password);

String username = uname.getText().toString();
System.out.println("username is: " + username);
String password = pw.getText().toString();
System.out.println("password is: " + password);

Uploader task = new Uploader();
task.execute(new String[] { "http://10.0.2.2/user_db/senddata.php", username, password });
}

public class Uploader extends AsyncTask<String, Void, String> {

@Override
protected String doInBackground(String... params) {

/*
String response = "Finished";
try {
postHttpContent(params[0],params[1],params[2]);
} catch (IOException e) {
Log.e("error", e.toString());
}
return response;
*/

try {
String urlParam = params[0];
String username = params[1];
String password = params[2];
String charset = java.nio.charset.StandardCharsets.UTF_8.name();

String query = String.format("username=%s&password=%s", URLEncoder.encode(username, charset), URLEncoder.encode(password, charset));

/*
URLConnection conn = new URL(urlParam).openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Accept-Charset", charset);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);

OutputStream output = conn.getOutputStream();
output.write(query.getBytes(charset));
output.flush();
output.close();
*/

URL url = new URL(urlParam);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(query);
writer.close();
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {

System.out.println("It's ok!");
System.out.println(query);

} else {

System.out.println("Error code there");

}

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return "Finished";
}

@Override
protected void onPostExecute(String result) {
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
}

}
}

还有我的 PHP:

<?php
// connect to database
$hostname = "localhost";
$username = "root";
$password = "root";
$dbname = "user_db";


$link = new mysqli($hostname, $username, $password, $dbname);

// get the JSONArray the app sends
$contents = file_get_contents('php://input');

$jsonArray = json_decode($contents, true);
$jsonCount = count($jsonArray);

for ($i = 0; $i < $jsonCount; $i++) {
$item = $jsonArray[$i];
$itemUsername = utf8_decode($item['username']);
$itemPassword = utf8_decode($item['password']);
// parse the other json attributes here like the one above

$sql = "INSERT INTO users (username, password) VALUES ('$itemUsername', '$itemPassword')";

if ($link->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $link->error;
}
}

$link->close();
?>

有很多带注释的代码,这就是我尝试过的所有代码,还有一些其他代码,但没有任何效果。我还尝试将所有连接和其余部分放入一个方法中,并在 AsyncTask 类中调用该方法,但也失败了。由于我不懂 PHP,所以我不确定问题是出在我的 Android 代码还是 PHP 文件中。

提前非常非常感谢。

最佳答案

首先您需要了解错误代码。通常 400 的错误代码意味着您以某种方式访问​​了服务器,但您访问资源受到限制,或者只是您通过提供错误的数据发出了错误的请求。错误在 500 左右,这些通常是严重错误。这表明您的服务器代码有问题。尽管请注意这一点,因为理解这一点很重要。在本地主机中进行测试时,您需要公开您的服务器的 IP 来处理请求,否则您将无法访问本地主机服务器。如果您是新手,像 Ngrok 这样的结帐工具将帮助您更快地公开您的 IP,以便您可以完成 API。祝你好运!

关于php - Android 和 PHP : POST-ing data from Android to mysql db using PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46458597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com