2016-07-01 63 views
1

我一直在为我正在创建的应用程序创建登录/注册功能(注意:这个应用程序现在是我自己的个人使用,所以我现在不想让我的密码超级安全)。当我在模拟的Android设备上运行我的应用程序时单击注册按钮时,Android Studio不会引发任何错误,但是当我检查PHP MyAdmin时没有任何显示。我使用了不同的用户名和密码组合(这里的例子显然是例子),一堆不同的localhost/127.0.0.1/10.0.2.2组合,似乎没有任何工作。在线测试时,10.0.2.2:8080/android_login_api/register.php表示该页面无法显示。 localhost:8080/android_login_api/register.php至少显示,但有错误说有一个未知的主机(是10.0.2.2:8080)。另外,我在WAMP上使用Port 8080。任何帮助将不胜感激,谢谢!Android - 数据没有被添加到MySQL数据库 - 没有错误

register.php:

<?php 
$con = mysqli_connect("10.0.2.2:8080" , "EXAMPLE_USERNAME" , "EXAMPLE_PASSWORD" , "android_api"); 
$name = $_POST["name"]; 
$email = $_POST["email"]; 
$password = $_POST["password"]; 
$statement = mysqli_prepare($con, "INSERT INTO users (name, email, password) VALUES (?, ?, ?)"); 
mysqli_stmt_bind_param($statement, "sss", $name, $email, $password); 
mysqli_stmt_execute($statement); 
$response = array(); 
$response["success"] = true; 

echo json_encode($response); 
?> 

RegisterRequest.java:

package example.com.musicapptest; 

import com.android.volley.Response; 
import com.android.volley.toolbox.StringRequest; 

import java.util.HashMap; 
import java.util.Map; 

/** 
* Created by Carter Klein on 6/26/2016. 
*/ 
public class RegisterRequest extends StringRequest { 
    private static final String REGISTER_REQUEST_URL = "http://10.0.2.2:8080/android_login_api/register.php"; 
    private Map<String, String> params; 

    public RegisterRequest(String name, String username, String password, Response.Listener<String> listener) { 
     super(Method.POST, REGISTER_REQUEST_URL, listener, null); 
     params = new HashMap<>(); 
     params.put("name", name); 
     params.put("username", username); 
     params.put("password", password); 
    } 

    @Override 
    public Map<String, String> getParams() { 
     return params; 
    } 
} 

RegisterActivity.java:

package example.com.musicapptest; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONException; 
import org.json.JSONObject; 

public class RegisterActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 

     final EditText name = (EditText) findViewById(R.id.name); 
     final EditText email = (EditText) findViewById(R.id.email); 
     final EditText password = (EditText) findViewById(R.id.password); 

     final Button registerButton = (Button) findViewById(R.id.btnRegister); 
     final Button toLogin = (Button) findViewById(R.id.btnLinkToLoginScreen); 

     registerButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final String clickName = name.getText().toString(); 
       final String clickEmail = email.getText().toString(); 
       final String clickPassword = password.getText().toString(); 

       Response.Listener<String> responseListener = new Response.Listener<String>() { 

        @Override 
        public void onResponse(String response) { 
         try { 
          JSONArray jsonResponse = new JSONArray(response); 
          boolean success = jsonResponse.getBoolean(Integer.parseInt("success")); 
          if (success) { 
           Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); 
           RegisterActivity.this.startActivity(intent); 
          } else { 
           AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this); 
           builder.setMessage("Register Failed") 
             .setNegativeButton("Retry", null) 
             .create() 
             .show(); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }; 

       RegisterRequest registerRequest = new RegisterRequest(clickName, clickEmail, clickPassword, responseListener); 
       RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this); 
       queue.add(registerRequest); 
      } 
     }); 
    } 
} 

回答

1

显然,你试图连接到一个无效的MySQL主机。在PHP代码的第一行中,第一个参数应该是MySql服务器地址,而不是Web服务器地址。

+0

所以,如果我通过localhost工作,这只是我的无线'IP? 192.168.x.x?另外如果是这样,它会是192.168.x.x:8080,或只是192.168.x.x?谢谢! –

+0

如果你的PHP运行在MySql的同一台机器上,你可以使用127.0.0.1。如果他们在不同的机器上,你应该使用无线IP。 它应该看起来像: '$ CON = mysqli_connect( “127.0.0.1”, “EXAMPLE_USERNAME”, “EXAMPLE_PASSWORD”, “android_api”);' 或 '$ CON = mysqli_connect( “192.168.XX” ,“EXAMPLE_USERNAME”,“EXAMPLE_PASSWORD”,“android_api”);' –

+0

好的,这工作!但是,由于某种原因,它仍然认为索引电子邮件在第4行(php的)是未定义的。你有什么想法,为什么会这样? –

相关问题