2015-12-28 185 views
0

在我的应用程序中,我需要将数据插入两个地方,当点击注册按钮时,一个是SQLite,另一个是MySQL(Xampp服务器)。数据已成功添加到SQLite,但MySQL没有运气。没有数据从Android插入到MySQL

注册

private static final String REGISTER_URL = "http://192.168.107.115/Android/CRUD/register.php"; 

    register.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Password=password.getText().toString(); 
        ConfirmPassword=confirmPassword.getText().toString(); 
         sqlcon.open(); 
         sqlcon.insertEntry(deviceName, Password); // insert to SQLite, no problem 
         register(deviceName, Password); // insert to MySQL 

        } 

       } 
      });  
     } 

     private void register(String name,String password) { 
      class RegisterUser extends AsyncTask<String, Void, String> { 
       ProgressDialog loading; 
       RequestHandler ruc = new RequestHandler(); 


       @Override 
       protected void onPreExecute() { 
        super.onPreExecute(); 
        loading = ProgressDialog.show(Register.this, "Please Wait",null, true, true); 
       } 

       @Override 
       protected void onPostExecute(String s) { 
        super.onPostExecute(s); 
        loading.dismiss(); 
        Toast.makeText(getApplicationContext(),"AA"+s,Toast.LENGTH_LONG).show(); 
       } 

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

        HashMap<String, String> data = new HashMap<String,String>(); 
        data.put("name",params[0]); 
        data.put("password",params[1]); 
        String result = ruc.sendPostRequest(REGISTER_URL,data); 
        return result; 
       } 
      } 

      RegisterUser ru = new RegisterUser(); 
      ru.execute(name,password); 
     } 

RequestHandler

public class RequestHandler { 

     public String sendPostRequest(String requestURL, 
             HashMap<String, String> postDataParams) { 

      URL url; 
      StringBuilder sb = new StringBuilder(); 
      try { 
       //Initializing Url 
       url = new URL(requestURL); 

       //Creating an httmlurl connection 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

       //Configuring connection properties 
       conn.setReadTimeout(15000); 
       conn.setConnectTimeout(15000); 
       conn.setRequestMethod("POST"); 
       conn.setDoInput(true); 
       conn.setDoOutput(true); 

       //Creating an output stream 
       OutputStream os = conn.getOutputStream(); 

       //Writing parameters to the request 
       //We are using a method getPostDataString which is defined below 
       BufferedWriter writer = new BufferedWriter(
         new OutputStreamWriter(os, "UTF-8")); 
       writer.write(getPostDataString(postDataParams)); 

       writer.flush(); 
       writer.close(); 
       os.close(); 
       int responseCode = conn.getResponseCode(); 

       if (responseCode == HttpsURLConnection.HTTP_OK) { 

        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
        sb = new StringBuilder(); 
        String response; 
        //Reading server response 
        while ((response = br.readLine()) != null){ 
         sb.append(response); 
        } 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return sb.toString(); 
     } 

     public String sendGetRequest(String requestURL){ 
      StringBuilder sb =new StringBuilder(); 
      try { 
       URL url = new URL(requestURL); 
       HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

       String s; 
       while((s=bufferedReader.readLine())!=null){ 
        sb.append(s+"\n"); 
       } 
      }catch(Exception e){ 
      } 
      return sb.toString(); 
     } 

     public String sendGetRequestParam(String requestURL, String id){ 
      StringBuilder sb =new StringBuilder(); 
      try { 
       URL url = new URL(requestURL+id); 
       HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

       String s; 
       while((s=bufferedReader.readLine())!=null){ 
        sb.append(s+"\n"); 
       } 
      }catch(Exception e){ 
      } 
      return sb.toString(); 
     } 

     private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException { 
      StringBuilder result = new StringBuilder(); 
      boolean first = true; 
      for (Map.Entry<String, String> entry : params.entrySet()) { 
       if (first) 
        first = false; 
       else 
        result.append("&"); 

       result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
       result.append("="); 
       result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); 
      } 

      return result.toString(); 
     } 
    } 

当用户点击注册按钮,只见显示Toast消息这是注册onPostExecute内。

RequestHandlersendGetRequestsendGetRequestParam从未使用过!在MySQL中检查时,不插入任何数据。

+0

progressDialog只显示不是1秒,然后显示吐司。 – John

+2

由于我看到'0' php&MySQL代码,我认为你已经确定它不是php/MySQL的问题。那么为什么你要标记php和MySQL呢? – Sean

+0

大部分/您在sendPostRequest()中使用的所有方法都有一个返回值。检查他们每个人的错误条件。还为'if(responseCode == HttpsURLConnection.HTTP_OK)'添加'else'分支。记录任何指示出现问题的情况和/或在UI中执行某些操作以使错误状态可见。 – VolkerK

回答

0

问题解决后,我打开我的真实设备的WiFi连接。多么令人难以置信的愚蠢的错误:)

3

我不确定你为什么选择这种建筑师。这是非常不安全的,因为如果任何人反编译你的代码,他们可以找到你的在线数据库密码并轻松访问你所有的数据,甚至更糟的是删除所有的东西。这就是为什么像API这样的词诞生。您应该在服务器端创建一个页面,该页面接受POST请求并验证变量。然后将其添加到在线数据库并返回例如Json字符串,确认插入。

+0

该代码中的“在线数据库密码”在哪里? – VolkerK

+0

我关注[this](https://www.simplifiedcoding.net/android-login-and-registration-with-php-mysql/)。不同的是我已经包含'SQLite' – John