У меня есть asynctask
, который получает userPin из моей базы данных Oracle.В моей главной теме, затем на кнопке я запускаю asynctask
.Значение из базы данных присваивается переменной с именем userPinRetrieved
.
Когда я отлаживаю эту переменную, она получает правильное значение.Однако, когда я обычно запускаю приложение, оно получает нулевое значение.После некоторого исследования и использования Thread.Sleep(x)
я вижу, что это связано с тем, что асинхронная задача не возвращает результат главному потоку и переменной во времени.
Мне посоветовали не использовать Thread.Sleep(x)
, какие у меня есть альтернативы?
Вот мой код:
AsyncTask:
String line;
BufferedReader br=new BufferedReader(new InputStreamReader(con.getInputStream()));
while ((line=br.readLine()) != null) {
JSONObject json = new JSONObject(line);
Log.d("Line",line);
if (json.getString("userPin") == null){
userPinRetrieved = "PIN NOT RECEIVED";
Log.d("userpin", userPinRetrieved);
} else {
userPinRetrieved = json.getString("userPin");
Log.d("userpin", userPinRetrieved);
}
}
}
} catch (Exception e) {
Log.v("ErrorAPP", e.toString());
}
return "";
}
@Override
protected void onPostExecute(String userPinRetrieved) {
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
}
Кнопка входа в систему:
signIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AsyncTaskRunner postReq = new AsyncTaskRunner();
postReq.execute("start");
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Toast.makeText(UserLogin.this, userPinRetrieved + " " + userPin, Toast.LENGTH_LONG).show();
if (userPin.equals(userPinRetrieved)) {
Toast.makeText(UserLogin.this, "Access Granted!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
Toast.makeText(UserLogin.this, "Hello " + employee, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(UserLogin.this, "Access Denied! Incorrect Pin", Toast.LENGTH_SHORT).show();
}
}
});
Кто-нибудь может предложить предложения?
Спасибо