【发布时间】:2018-02-03 14:35:03
【问题描述】:
我试图在我的应用程序中实现一个数据库搜索功能,它搜索一个用户表并返回一个用户数组,这些用户喜欢搜索字符串。我需要这个数组来填充 acTextView 下方下拉的列表,但我无法让 JSONArray 正确传递,而且我不确定如何将数据传递给 acTextView。对此的任何帮助将不胜感激!
应用端搜索活动:
public class PopupAddContact extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popup_add_contact);
getWindow().setLayout(ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
final AutoCompleteTextView searchInput = (AutoCompleteTextView) findViewById(R.id.searchText);
searchInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
final String name = searchInput.getText().toString();
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
System.out.println(response);
//ArrayList<String> array = new ArrayList<String>();
JSONArray jsonResponse = new JSONArray(response);
System.out.println(jsonResponse);
System.out.println("working");
/*
if (jsonResponse != null) {
Integer contact_user_id = jsonResponse.getInt();
String contact_name = jsonResponse.getString("name");
String contact_email = jsonResponse.getString("email");
} else if(response != null){
Toast.makeText(PopupAddContact.this, "No users found", Toast.LENGTH_SHORT).show();
} */
} catch (JSONException e) {
e.printStackTrace();
}
}
};
PopupContactRequest AddContactRequest = new PopupContactRequest(name, responseListener);
RequestQueue queue = Volley.newRequestQueue(PopupAddContact.this);
queue.add(AddContactRequest);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
用于检索用户数组的 PHP 脚本:
if(!empty($_POST["name"])){ // check post data and then start
$mysqli = new mysqli("db creds");
$name = $_POST["name"];
$response=array();
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT user_id, name, email FROM users WHERE name LIKE %?%";
if ($stmt = $mysqli->prepare($query)) { // prepare query
$stmt->bind_param("s", $name); // bind parameters
$stmt->execute();
$stmt->bind_result($data);
while ($stmt->fetch()) {
$response[] = $data; //assign each data to response array
}
}
echo json_encode($response);
$mysqli->close();
}else{
echo "no users found";
}
【问题讨论】:
-
你能添加一个json响应吗?只有一个包含查询结果的响应样本
-
php 脚本末尾附近已经有一个 json_encoded 回显,还是你的意思不一样?
-
我的意思是调用php页面的结果,作为字符串。或者您在 onResponse(String response) 方法中作为参数接收的字符串。一个结果的例子好像没有结果,在这种情况下你没有得到一个 json,所以它会在解析时创建一个 JSONException。
标签: php android arrays json mysqli