2016-01-12 139 views
0

我对Android编码相当陌生,我试图创建将某些信息插入到我的MySQL数据库中的应用程序。我在网上发现了很多教程和技巧,并创建了lite应用程序来尝试过程。一切都编译好,应用程序运行,它似乎发送成功的数据。但事实上,我的表格中没有数据。
这是我的PHP代码android_add.php:Android应用程序无法将数据插入MySQL数据库

<?php 
$con = mysqli_connect(localhost, user, psswd, name); //those works 
mysqli_set_charset($con, "utf8");  //working with special symbols 

$name = $_POST['name'];  //get name & author from App 
$author = $_POST['author']; 

$sql = "insert into kniha_test (k_autor_pr,k_nazev) values ('$name','$address')";     
if(mysqli_query($con,$sql)){ 
    echo 'success'; 
} else { 
    echo 'failure'; 
} 
mysqli_close($con); 
?> 

这是我的MainActivity.java:正如我所说的

import android.content.ContentValues; 
import android.os.AsyncTask; 
import android.provider.Settings; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 


import java.io.BufferedInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.ProtocolException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

    private EditText editTextName; 
    private EditText editTextAuthor; 

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

     editTextName = (EditText) findViewById(R.id.editTextName); 
     editTextAuthor = (EditText) findViewById(R.id.editTextAuthor); 
    } 

    public void insert (View view){ 
     String name = editTextName.getText().toString(); 
     String author = editTextAuthor.getText().toString(); 

     insertToDatabase(name,author); 
    } 

    protected void insertToDatabase(String name, String author){ 
     class SendPostReqAsyncTask extends AsyncTask<String, Void, String> { 


      String name; 
      String author; 
      public void saveNameAut(String name, String author){ 
       this.name = name; 
       this.author = author; 
       name = editTextName.getText().toString(); 
       author = editTextAuthor.getText().toString(); 
      } 

      @Override 
      protected String doInBackground(String... params){ 
       String paramName = params[0]; 
       String paramAuthor = params[1]; 



       ContentValues values = new ContentValues(); 
       values.put("name", this.name); 
       values.put("author", this.author); 

       String addUrl = "http://glaserproject.com/knihovna_kyber/android/android_add.php"; 

       try {URL url = new URL(addUrl); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setRequestMethod("POST"); 

       System.out.println("Response Code: " + conn.getResponseCode()); 

       } catch (IOException e){}; 

       return "Succes"; 
      } 

      @Override 
      protected void onPostExecute(String result){ 
       super.onPostExecute(result); 

       Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show(); 
       TextView textViewResult = (TextView) findViewById(R.id.textViewResult); 
       textViewResult.setText("inserted"); 
      } 
     } 
     SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(); 
     sendPostReqAsyncTask.execute(name, author); 
    } 

} 

,我只是初学者,所以可能会有一些真正愚蠢的,但我无法弄清楚什么。并且可能会出现一些来自不同尝试的垃圾邮件。 PHP代码应该可以,我使用几乎相同的插入HTML,所以我猜,我的Java代码存在问题。
我会非常感激您的建议/回复。
谢谢!

PS:我得到响应代码为200

+0

INSERT语句中的'$ address'应该是'$ author'吗? – Benjy1996

+0

php代码不正确。我得到200的状态,但它返回字符串“失败”。我相信你的意思是把'$ author'放在查询中,而不是'$ address'。 – ddelnano

+1

您在PHP的错误日志中是否收到异常?您还可以尝试[围绕'try-catch'](http://stackoverflow.com/a/273090/5663450)中的代码来检测'mysqli_ *'语句抛出的任何异常,并查看可能存在的问题 – Benjy1996

回答

0

您通过的AsyncTask 发送空值,你有没有印,你是通过
发送值试试这个

protected void insertToDatabase(String name, String author){ 
    class SendPostReqAsyncTask extends AsyncTask<String, Void, String> { 


     String cName=name; 
     String cAuthor=author; 


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

      ContentValues values = new ContentValues(); 
      values.put("name", cName); 
      values.put("author", cAuthor); 

      String addUrl = "http://glaserproject.com/knihovna_kyber/android/android_add.php"; 

      try {URL url = new URL(addUrl); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setRequestMethod("POST"); 

      System.out.println("Response Code: " + conn.getResponseCode()); 

      } catch (IOException e){}; 

      return "Succes"; 
     } 

     @Override 
     protected void onPostExecute(String result){ 
      super.onPostExecute(result); 

      Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show(); 
      TextView textViewResult = (TextView) findViewById(R.id.textViewResult); 
      textViewResult.setText("inserted"); 
     } 
    } 
    SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(); 
    sendPostReqAsyncTask.execute(name, author); 
} 

再试一次并让我知道它是否可以解决您的问题....

+0

我解决了PHP中的一个问题,但即使使用您的代码,我也会发送空白字符串(在数据库中输入空值)。奇怪的是,即使我在将它们放入内容值之前定义值,它仍然不起作用。 – Sheler

相关问题