2017-01-11 2 views
1

Итак, я пытаюсь создать и приложение в androidstudio, и я хочу получить некоторые данные из базы данных mysql и использовать это в приложении. Я использую php-скрипт онлайн и ответственный за получение данных. Вся эта часть работает. Но когда я присваиваю значение, которое я получил (называемый идентификатором в объекте JSON), в переменную String, называемую записями, не любит ее сохранять или что-то в этом роде. Когда я вызываю значение в 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; 
}} 
+0

Здесь нет кода PHP. Почему это помечено таким образом? – tadman

+0

Извините, мне было предложено, щелкнули, чтобы быстро. im newbie: p –

+0

В 'JSONObject.getString (key)' '' key' чувствителен к регистру. Вы считали это? – noahnu

ответ

0

Я пробовал свой код, но с моей точки зрения он хорошо работает. Я использовал эти сценарии:

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); 
} 

?> 

Я думаю, что если вы получаете ERR или, то он находится в LOGIN_REQUEST_URL/params или в PHP-скрипте, как в тех местах, где вы спрашиваете, я получаю данные из БД. Хотя в этом случае setData() в методе onCreate всегда возвращает null. Вы устанавливаете значение «записей» в ответе, который работает в фоновом режиме. Таким образом, ваш код приходит к GetData(), отправляющему запрос на сервер, и переходит к следующей команде, которая является setData(), не дожидаясь загрузки информации.

+0

Итак, проблема была в том, что я вспомнил значение записей в setData(), когда сотрудник-ответчик все еще был занят. Теперь я поставил setData() в onclicklistener, чтобы я мог дать ему некоторое время, и это работает. Благодаря! –