[英]save data into remote database
我需要将用户填写的信息从移动端存储到远程服务器。 例如,我在下面编写了用于登录/注册的代码。 我已经尝试过了,但是没有在服务器中获取任何类型的数据存储。 我怀疑这可能是我的PHP脚本错误。
MainActivity.Java:
public class MainActivity extends Activity {
TextView name, email, number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = (TextView) findViewById(R.id.name);
email = (TextView) findViewById(R.id.email);
number = (TextView) findViewById(R.id.number);
}
@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 send(View v) {
new Send().execute();
}
class Send extends AsyncTask<String, Void, Long> {
protected Long doInBackground(String... urls) {
String Name = name.getText().toString();
String Email = email.getText().toString();
String Number = number.getText().toString();
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://xxx.000webhostapp.com/phpcode.php");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("Name", Name));
nameValuePairs.add(new BasicNameValuePair("Email", Email));
nameValuePairs.add(new BasicNameValuePair("Number", Number));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (Exception e) {
// TODO Auto-generated catch block
}
return null;
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(Long result) {
}
}
}
创建一个新记录以对其进行测试。 到目前为止,它一直有效,它创建了新条目。
PHP脚本:
<?php
define('hostname', 'localhost');
define('user', 'xxx_username');
define('passwort', 'xxx');
define('databaseName', 'xxx_name');
$conn = mysqli_connect(hostname, user, passwort, databaseName);
if($conn->connect_error){
die("Connection failed: " .$conn->connect_error);
}
$Name = $_POST['Name'];
$Email = $_POST['Email'];
$Number = $_POST['Number'];
$sql = "INSERT INTO demotable (Name, Email, Number) VALUES ('{$Name}','{$Email}','{$Number}')";
if($conn->query($sql) === TRUE) {
echo "Record created";
} else {
echo "Error: ".$sql. $conn->error;
}
$conn->close();
?>
您正在尝试在doInBackground()中执行UI操作,因此在进行网络调用之前会导致异常。 UI操作只能在onPreExecute()和onPostExecute()中执行 。 而网络调用仅在doInBackground()中执行 。 试试这个代码
class Send extends AsyncTask<String, Void, Long> {
String Name,Email,Number;
@Override
protected void onPreExecute(){
Name = name.getText().toString();
Email = email.getText().toString();
Number = number.getText().toString();
}
@Override
protected Long doInBackground(String... urls) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://affe.000webhostapp.com/phpcode.php");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("Name", Name));
nameValuePairs.add(new BasicNameValuePair("Email", Email));
nameValuePairs.add(new BasicNameValuePair("Number", Integer.toString(Number)));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (Exception e) {
// TODO Auto-generated catch block
}
return null;
}
@Override
protected void onProgressUpdate(Integer... progress) {
}
@Override
protected void onPostExecute(Long result) {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.