J'ai une classe appelée "DataBase" étend "AsyncTask" pour l'utilisation de base de données distanteservice Web dans Android en utilisant 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);
}
}
Quand je lance mon projet la ligne de code "dataBase.Execute();" dans la classe "MainActivity", n'exécute pas immédiatement le bloc de code "doInBackground", mais s'exécute après avoir fini d'exécuter toutes les lignes de code qui sont dans "MainActivity", et pour cette raison dans la ligne de code "myArray = dataBase.getArrayList(); " il renvoie null.
Je veux savoir comment faire le "dataBase.Execute();" Exécuter immédiatement et ne pas continuer avec les autres lignes du code "MainActivity", jusqu'à ce qu'il exécute "doInBackground", puis la ligne de code "myArray = dataBase.getArrayList();" pas de retour nul