2017-10-08 96 views
0

我想创建一个简单的注册页面,将用户名,电子邮件和密码传递给php端。 我检查了我的PHP代码与RESTclient(邮递员),它工作正常。但是当我试图从android使用抽象传递参数时,onResponse中的响应返回一个空值。 这里是代码:排除响应返回空值

Php: 

DbOperations.php 

<?php 
class DbOperations{  
    private $con; 
    require_once dirname(__FILE__).'/DbConnect.php'; 
    $db = new DbConnect(); 
    $this->con = $db->connect(); 
} 
function createUser($username,$pass,$email){ 
    $password = md5($pass); 
    $stmt = $this->con->prepare("INSERT INTO `android`.`users` (`id`, `username`, `password`, `email`) VALUES (NULL, ?, ?, ?);"); 
    $stmt->bind_param("sss",$username,$password,$email);    
    if($stmt->execute()){ 
     return true; 
     }else{ 
      return false; 
     } 
    } 
} 

registerUser.php 

<?php 

    if  
    (isset($_POST['username']) and 
     isset($_POST['password']) and 
     isset($_POST['email']) 
     ){ 
      $db = new DbOperations();  
      if($db->createUser(
       $_POST['username'], 
       $_POST['password'], 
       $_POST['email'] 
      )){ 
       $response['error'] = "false"; $response['message'] = "user register success"; 
      }else{ 
       $response['error'] = "true"; 
       $response['message'] = "user register failed"; 
      } 
    }else{ 
     $response['error'] = true; 
     $response['message'] = "Required fields are missing"; 
    } 
}else{ 
    $response['error'] = true; 
    $response['message'] = "invalid post request"; 
} 
echo json_encode($response); 

安卓

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

private EditText etUsername,etEmail,etPassword; 
private Button bt; 
private ProgressDialog progressDialog; 

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

    etEmail=(EditText)findViewById(R.id.et_email); 
    etUsername=(EditText)findViewById(R.id.et_username); 
    etPassword=(EditText)findViewById(R.id.et_pasword); 

    bt=(Button)findViewById(R.id.bt); 

    progressDialog =new ProgressDialog(this); 

    bt.setOnClickListener(this); 

} 


private void registerUser(){ 
     final String email=etEmail.getText().toString().trim(); 
     final String username=etUsername.getText().toString().trim(); 
     final String password=etPassword.getText().toString().trim(); 

    progressDialog.setMessage("Registering.."); 
    progressDialog.show(); 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, 
      Constants.URL_REGISTER, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        progressDialog.dismiss(); 

        try { 
         JSONObject jsonObject = new JSONObject(response); 
         Toast.makeText(getApplicationContext(),jsonObject.getString("message"),Toast.LENGTH_LONG).show(); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        progressDialog.hide(); 
        Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG).show(); 
       } 
      }){ 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String,String> params=new HashMap<>(); 
      params.put("username",username); 
      params.put("email",email); 
      params.put("password",password); 

      return params; 
     } 
    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 

} 

@Override 
public void onClick(View v) { 
    if (v==bt) 
     registerUser(); 
} 

}

回答

0
try { 
        JSONObject jsonObject = new JSONObject(response); 
        Toast.makeText(getApplicationContext(),jsonObject.getString("message"),Toast.LENGTH_LONG).show(); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

首先你应该检查的响应。 可以请你共享寄存器文件PHP 的代码注册的用户名等之后,你应该打印一些反应有那么你会得到的凌空响应

$ SQL =“INSERT INTO TABLE_NAME(用户名,密码,电子邮件) VALUES( '$用户名', '密码$', '$电子邮件')“;

改变这种代码检查响应后,那么你会得到成功注册,以便在java比较响应然后举杯

+0

使用postman.it我测试过的PHP代码工作正常(json的返回消息键)。请检查问题。我也添加了php代码 –

0

不知道你这样做或没有,只是尝试像下面

尝试首先定义一个空数组,像这样:

$response = array(); <--add this line,create an empty array 1st..then only can echo out 

if  
    (isset($_POST['username']) and 
     isset($_POST['password']) and 
     isset($_POST['email']) 
     ){ 
      $db = new DbOperations();  
      if($db->createUser(
       $_POST['username'], 
       $_POST['password'], 
       $_POST['email'] 
      )){ 
       $response['error'] = "false"; $response['message'] = "user register success"; 
      }else{ 
       $response['error'] = "true"; 
       $response['message'] = "user register failed"; 
      } 
    }else{ 
     $response['error'] = true; 
     $response['message'] = "Required fields are missing"; 
    } 
}else{ 
    $response['error'] = true; 
    $response['message'] = "invalid post request"; 
} 
echo json_encode($response);