У меня есть приложение для Android, которое извлекает данные из mysql db через php. Он отлично работает, но у меня есть (простая) проблема переменных.Java android and json - переменная путаницы
Я хочу создать переменную внутри класса MainActivity. Затем в классе MainActiviy у меня есть метод onCreate - и внутри этого у меня есть некоторый материал json, который извлекает мои данные из mysql.
Теперь я хочу присвоить значение mysql переменной i, созданной в классе MainActivity (она назначается внутри метода onResponse из материала json), а затем я просто хочу использовать эту переменную и записать ее в текстовом виде, и я сделаю это в нижней части метода onCreate.
Но по какой-то причине он «забывает» значение, присвоенное переменной, когда я должен использовать его вне метода onResponse. (если я устанавливаю текст текста в методе onResponse, он отлично работает).
public class MainActivity extends ActionBarActivity {
// I create the variable here
String someString;
TextView text;
RequestQueue reqq;
String showUrl = "http://www.someurl.com/get_data.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.textid);
reqq = Volley.newRequestQueue(getApplicationContext());
JsonObjectRequest jsonob = new JsonObjectRequest(Request.Method.POST,
showUrl, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray dataAr = response.getJSONArray("json_data");
for (int i = 0; i < dataAr.length(); i++) {
JSONObject dat = dataAr.getJSONObject(i);
// Here I want to assign some data from my mysql db to the variable
someString = dat.getString("aar");
// If I set the the textview to display value of someString HERE, it works!
// text.setText(someString);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println(error.getMessage());
}
});
reqq.add(jsonob);
// HERE i want to display the value of the variable in the textview!
// - but it doesnt "remember" the value
text.setText(someString);
}
}
Если я использую статический ключевое слово в переменной SomeString, он запоминает значение, но только во второй раз я открыть приложение!
Я очень новичок в этом, и попробовал Google, и попробовал кое-что с одноэлементным классом, но я просто не понимаю этого!
Мне понравилось бы, если бы кто-то мог связать мне некоторую информацию, чтобы помочь мне получить это, И привести пример того, как мой код должен быть, так что это сработает!
СПАСИБО! : D
Это определенно имеет смысл! Не могли бы вы привести пример о том, как подождать, пока после ответа на установку текста? – Simun
Вы делаете это правильно: просто установите текст textview из метода 'onResponse'. Это единственный способ. –
О, ладно. Проблема в том, что приведенный выше код является примером того, что я делаю. Мне нужно использовать переменную someString для других вещей вне метода onResponse. Не существует способа «подождать ответа» вне метода onResponse, а затем сделать что-нибудь? – Simun