У меня есть класс, называемый "DataBase" расширяет "AsyncTask" для использования удаленной базы данныхвеб-службы в Android с помощью AsyncTask
public class DataBase extends AsyncTask<String, Void, String>{
ArrayList<String> arrayList = new ArrayList<>();
String nameJson;
public DataBase(String nameJson) {
this.nameJson = nameJson;
}
protected String doInBackground(String... params) {
String jsonPhp = params[1];
try {
String line = null;
URL url = new URL(jsonPhp);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = new BufferedInputStream(httpURLConnection.getInputStream());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer stringBuffer = new StringBuffer();
if(bufferedReader != null){
while((line = bufferedReader.readLine()) != null){
stringBuffer.append(line+" 'n");
}
}else{
return null;
}
return stringBuffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String s) {
arrayData(s);
}
public void arrayData(String buffer){
try {
JSONArray jsonArray = new JSONArray(buffer);
JSONObject jsonObject = null;
arrayList.clear();
for(int i=0;i<jsonArray.length();i++){
jsonObject = jsonArray.getJSONObject(i);
String dataList = jsonObject.getString(nameJson.toString());
arrayList.add(dataList);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public ArrayList<String> getArrayList() {
return arrayList;
}
}
MainActivity
public class MainActivity {
String adress = "http//....../.php"; //Here is the address of the file containing the json
ListView listView;
ArrayAdapter myArray;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.my_list);
final DataBase dataBase = new DataBase("names");
dataBase.execute(address); //This line of code is executed as if it were the last line of code, as if it were placed under the setAdapter.
myArray = dataBase.getArrayList(); // and for that reason this line return null
ArrayAdapter arrayAdapter;
arrayAdapter = new ArrayAdapter<String>(context,android.R.layout.simple_expandable_list_item_1,myArray);
listView.setAdapter(arrayAdapter);
}
}
Когда я запускаю свой проект в строка кода "dataBase.Execute();" в классе «MainActivity», не выполняет блок кода «doInBackground» немедленно, но запускается после завершения выполнения всех строк кода, которые находятся в «MainActivity», и по этой причине в строке кода «myArray = dataBase.getArrayList();» он возвращает null.
Я хочу знать, как сделать «dataBase.Execute();» запускать немедленно и не продолжать с другими строками кода «MainActivity», пока он не запустит «doInBackground», а затем строку кода «myArray = dataBase.getArrayList();» no return null