Я пытаюсь подключить свое приложение к базе данных Mysql с помощью JSON и PHP. PHP-скрипт возвращает массив JSON, который определяет статус света (true или false).Передача данных JSON в основное действие
Я попытался поместить код JSON, который открывает соединение URL и получает статус в отдельном классе. В результате я могу называть его всякий раз, когда мне нужно его использовать.
Проблема заключается в том, что переменная res
имеет значение внутри класса JSON, но когда я попытался получить к ней доступ из основного действия с использованием объекта JSON, он пуст. Может ли кто-нибудь направить меня к правильному решению проблемы?
Основная деятельность
public class MainActivity extends AppCompatActivity {
public TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t = (TextView) findViewById(R.id.t1);
Json j = new Json();
j.execute("http://127.0.0.1/web/test.php");
t.setText(j.res);
}
}
Json класс
public class Json extends AsyncTask<String, String, String> {
String result = "";
public String res="";
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... params) {
InputStream isr = null;
try {
String URL = params[0];
java.net.URL url = new URL(URL);
URLConnection urlConnection = url.openConnection();
isr = new BufferedInputStream(urlConnection.getInputStream());
} catch (Exception e) {
Log.e("log_tag", "error in http conection" + e.toString());
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(isr, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
isr.close();
result = sb.toString();
} catch (Exception e) {
Log.e("Log", "failed " + e.toString());
}
return null;
}
JSONObject json;
protected void onPostExecute(String result2) {
try {
String password1 = "";
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
json = jArray.getJSONObject(i);
res=json.getString("status");
break;
}
} catch (Exception e) {
}
}
}
't.setText (j.res);' происходит до того, как задача Async завершает выполнение. Все манипуляции с пользовательским интерфейсом должны выполняться через 'onPostExecute' – jitinsharma
@ muthana1990 да, вы должны это сделать, а не возвращать null в doinback ground, как показано в моем ответе –
Я обновил мои ан, если это имеет смысл. –