В настоящее время я работаю над проектом, в котором я должен добавить данные в базу данных MySQL. Я использую Microsoft Azure в качестве хоста, и все работает нормально. Единственная проблема, которую я получаю, заключается в том, что при попытке добавить данные с помощью веб-запроса «Опубликовать» я не получаю никаких ошибок, но ничего не добавляется.
Вот мой код на Android Studio, опять же без ошибок:
package com.example.antoinedepommereau.livre;public class Login extends AppCompatActivity {
public static Dialog mydiag;
public static Button SignUpButton;
public static EditText firstnameTxt;
public static EditText lastnameTxt;
public static EditText emailsignupTxt;
public static EditText passwordsignupTxt;
public static EditText confirmpasswordTxt;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_login);
Button LoginButton = (Button) findViewById(R.id.btn_login);
final TextView SignUpText = (TextView) findViewById((R.id.link_signup));
final EditText emailTxt = (EditText)findViewById(R.id.input_email);
final EditText passwordTxt = (EditText)findViewById(R.id.input_password);SignUpText.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
showDialog();
}
});
LoginButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if("".equals(emailTxt.getText().toString())){
emailTxt.setError("Email adress is required!");
return; }
if("".equals(passwordTxt.getText().toString())){
passwordTxt.setError("Password is required!");
return;
}
/* Intent startActivitylivre = new Intent(Login.this, livremain.class);
startActivity(startActivitylivre);*/
}
});
}
private void showDialog()
{
final Dialog mydiag = new Dialog(this);
//set the title
mydiag.setTitle("Sign Up");
//inflate the layout
mydiag.setContentView(R.layout.fragment_sign_up);
mydiag.show();
SignUpButton = (Button) mydiag.findViewById(R.id.btn_signup);
firstnameTxt = (EditText)mydiag.findViewById(R.id.login_firstname);
lastnameTxt = (EditText)mydiag.findViewById(R.id.login_lastname);
emailsignupTxt = (EditText)mydiag.findViewById(R.id.login_email);
passwordsignupTxt = (EditText)mydiag.findViewById(R.id.login_password);
confirmpasswordTxt = (EditText)mydiag.findViewById(R.id.login_passwordconfirm);
SignUpButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if ("".equals(firstnameTxt.getText().toString())) {
firstnameTxt.setError("Your first name is required!");
return;
}
if ("".equals(lastnameTxt.getText().toString())) {
lastnameTxt.setError("Your last name is required!");
return;
}
if ("".equals(emailsignupTxt.getText().toString())) {
emailsignupTxt.setError("You must enter a valid email adress!");
return;
}
/* if(passwordsignupTxt.getText().toString() != confirmpasswordTxt.getText().toString()){
confirmpasswordTxt.setError("Passwords are not matching");
return;
}*/
try {
getText();
}
catch (Exception e) {
Toast.makeText(getApplicationContext(), "Url expection!", Toast.LENGTH_LONG).show();
}
}
});
}public void getText () throws UnsupportedEncodingException{
String name = firstnameTxt.getText().toString();
String email = emailsignupTxt.getText().toString();
String password = confirmpasswordTxt.getText().toString();
String data = URLEncoder.encode("Name", "UTF-8")
+ "=" + URLEncoder.encode(name, "UTF-8");
data += "&" + URLEncoder.encode("Email", "UTF-8") + "="+ URLEncoder.encode(email, "UTF-8");
data += "&" + URLEncoder.encode("Password", "UTF-8")
+ "=" + URLEncoder.encode(password, "UTF-8");
String text = "";
BufferedReader reader=null;
// Send data
try
{
// Defined URL where to send data
URL url = new URL("http://hitachipick.azurewebsites.net/SQLQuery.php");
// Send POST data request
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
wr.flush();
// Get the server response
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
// Append server response in string
sb.append(line + "\n");
}text = sb.toString();
}
catch(Exception ex)
{
}
finally
{
try
{
reader.close();
}
catch(Exception ex) {}
}
confirmpasswordTxt.setText(text);
}
}
И тогда мой код PHP:
<?php
$servername = "eu-cdbr-azure-north-e.cloudapp.net";
$username = "bdbad7b3d3b2da";
$password = "39d98912";
try
{
$conn = new PDO("mysql:host=$servername;dbname=Hitachi",$username,
$password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "connected succesfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
if (isset($_POST['Name']) && isset($_POST['Email']) &&
isset($_POST['Password'])){
//Insert new contact into database
$query = $conn->prepare('INSERT INTO contact_info (contact_name,
contact_email, contact_password) VALUES (:name, :email, :password)');
$query->execute([
':name' => $_POST['Name'],
':email' => $_POST['Email'],
':password' => $_POST['Password']
]);
echo"done";
}
?>
Соединение с базой данных работает нормально, так как я «подключен успешно», но в базу данных ничего не добавлено. Я не знаю, откуда проблема.
Надеюсь, ты сможешь помочь,
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ:
Я сейчас использую код Рави: `String urlParameters =» Name = «+ name +»&Email = «+ электронная почта +»&Пароль «+ пароль;
byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );
int postDataLength = postData.length;
String request = "http://hitachipick.azurewebsites.net/SQLQuery.php";
URL url = new URL( request );
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setDoOutput( true );
conn.setInstanceFollowRedirects( false );
conn.setRequestMethod( "POST" );
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
conn.setUseCaches( false );
try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
wr.write( postData );
Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG).show();
}`
Но это все еще не работает …. Я добавил улов, чтобы увидеть ошибку в log-cat:
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 com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:209)
at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:163)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:105)
at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:489)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:465)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:371)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:503)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:130)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:261)
at com.example.antoinedepommereau.livre.Login.getText(Login.java:173)
at com.example.antoinedepommereau.livre.Login$3.onClick(Login.java:134)
at android.view.View.performClick(View.java:6261)
at android.widget.TextView.performClick(TextView.java:11185)
at android.view.View$PerformClick.run(View.java:23752)
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:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Я действительно застрял, Pleasse Hellpp …
Если var_dump($POST)
печать null
, что означает, что у вас есть проблема, когда ваш запрос создается.
Также я заметил, что вы не указали тип запроса в своем коде. Так что, вероятно, просто укажите
conn.setRequestMethod( "POST" );
Если все еще не работает, тогда используйте приведенный ниже код, который работает для меня.
// specify parameter and their value
String urlParameters = "param1=a¶m2=b¶m3=c";
byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );
int postDataLength = postData.length;
String request = "http://hitachipick.azurewebsites.net/SQLQuery.php";
URL url = new URL( request );
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setDoOutput( true );
conn.setInstanceFollowRedirects( false );
conn.setRequestMethod( "POST" );
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
conn.setUseCaches( false );
try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
wr.write( postData );
}
удалось заставить его работать с помощью класса AsinTask
класс sendFeedback extends AsyncTask {
@Override
protected String doInBackground(String[] params) {
// do above Server call hereArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("Name", name ));
postParameters.add(new BasicNameValuePair("Email", email ));
postParameters.add(new BasicNameValuePair("Password", password));
String responseString = null;
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://hitachipick.azurewebsites.net/SQLQuery.php");
// no idea what this does :)
httppost.setEntity(new UrlEncodedFormEntity(postParameters));
// This is the line that send the request
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
}
catch (Exception e)
{
Log.e("log_tag", "Error in http connection "+e.toString());
}
return"";
}
@Override
protected void onPostExecute(String message) {
//process message
}}