gpt4 book ai didi

java - 值未分配给 Responselistener 中的变量

转载 作者:行者123 更新时间:2023-11-30 22:06:20 26 4
gpt4 key购买 nike

所以,我正在尝试在 androidstudio 中构建和应用程序,我想从 mysql 数据库中检索一些数据并在应用程序中使用它。我在线使用 php 脚本和 responselistener 来检索数据。这整个部分都在工作。但是,当我将检索到的值(在 JSON 对象中称为 ID)分配给名为条目的字符串变量时,它不喜欢保存它或其他东西。当我调用 setData() 中的值时,它返回 null。有人可以阐明它吗?

public class MainActivity extends AppCompatActivity {

EditText editText;

public String entries;

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

editText = (EditText) findViewById(R.id.text);

getData();
setData();

}

public void getData(){
Response.Listener<String> responseListenerCount = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("JSON Parser", response);
try {
JSONObject jsonResponse = new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");
if (success) {



entries = jsonResponse.getString("ID"); // HERE THE RETRIEVED VALUE IS ASSIGNED TO VARIABLE ENTRIES
Toast.makeText(getApplicationContext(), " Retrieving success ", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), " Retrieving failed ", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
// HERE THAT VALUE IS NULL AGAIN
}
};
CountRequest countRequest = new CountRequest(responseListenerCount);
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
queue.add(countRequest);

}

public void setData(){
editText.setText(entries);
}}

这是在请求队列中调用的 countRequest.java。再次;这部分工作正常,所以它不是很相关。

public class CountRequest extends StringRequest {

private static final String LOGIN_REQUEST_URL = "*************";
private Map<String, String> params;

public CountRequest(Response.Listener<String> listener){
super(Request.Method.POST, LOGIN_REQUEST_URL, listener, null);
params = new HashMap<>();
}

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

最佳答案

我已经尝试了您的代码,但从我的角度来看它运行良好。我用过这个脚本:

public class MainActivity extends AppCompatActivity {

EditText editText;

public String entries="test";

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

editText = (EditText) findViewById(R.id.text);

getData();
System.out.println(entries); //here id null or in my case "test"
setData();


}

public void getData(){
Response.Listener<String> responseListenerCount = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("JSON Parser", response);
try {
JSONObject jsonResponse = new JSONObject(response);
int success = jsonResponse.getInt("success");
if (success==1) {



entries = jsonResponse.getString("user_id"); //geting user id
System.out.println(entries);
Toast.makeText(getApplicationContext(), " Retrieving success ", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), " Retrieving failed ", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}

System.out.println(entries); //id is still there
setData();
}
};
CountRequest countRequest = new CountRequest(responseListenerCount);
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
queue.add(countRequest);
System.out.println(entries); //here id null or in my case "test"
}

public void setData(){
editText.setText(entries);
}}


public class CountRequest extends StringRequest {

private static final String LOGIN_REQUEST_URL = "http://mypage.com/login_user.php?login=a&password=b";
private Map<String, String> params;

public CountRequest(Response.Listener<String> listener){
super(Request.Method.POST, LOGIN_REQUEST_URL, listener, null);
params = new HashMap<>();
}

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


<?php

define('DB_USER', "*******"); // db user
define('DB_PASSWORD', "*******"); // db password
define('DB_DATABASE', "*******"); // database name
define('DB_SERVER', "localhost"); // db server

class DB_CONNECT {

function __construct() {
$this->connect();
}

function __destruct() {
$this->close();
}

function connect() {

$con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());

$db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());

return $con;
}


function close() {
mysql_close();
}

}

?>


<?php

$response = array();

if (isset($_GET['login']) && isset($_GET['password'])) {

$login = $_GET['login'];
$password = $_GET['password'];

require_once __DIR__ . '/db_connect.php';

$db = new DB_CONNECT();


$checkUser = mysql_query("Select * FROM user where login = '$login'");

if(mysql_num_rows($checkUser)>0){

$result = mysql_fetch_array($checkUser);
$userpassword = $result["password"];
$user_id = $result["user_id"];

$response["success"] = 1;
$response["message"] = $userpassword;
$response["user_id"] = $user_id;
echo json_encode($response);
}

else{
$response["success"] = 0;
$response["message"] = "User not found";
echo json_encode($response);
}
}
else {
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";

echo json_encode($response);
}

?>

我认为,如果您遇到错误,那么它是在 LOGIN_REQUEST_URL/params 或 PHP 脚本中,就像您询问我从数据库获取数据的地方一样。虽然在这种情况下 onCreate 方法中的 setData() 将始终返回 null。您正在为在后台运行的响应设置“条目”的值。因此,您的代码将进入 GetData() 向服务器发送请求并继续执行下一个命令 setData(),而不是等待下载的信息。

关于java - 值未分配给 Responselistener 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41601229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com