Я хочу показать диалоговое окно, когда асинхронная задача начинает загружать контент из Интернета в методе onPreExecute, и удалить диалоговое окно, когда загрузка была завершена в методе onPostExecute,
public class ListNumbers extends AppCompatActivity {
private ListView lView;
private NumberAdapter mNumAdapt;
public List<String> numes;
private ArrayList<Phonesnum> numbersList;
public AsyncTask<Void,Void,Void> mTask;
private String json_string;
private String url="the url where to download content";
public class DownloadLink extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... strings) {
Log.i("URL",strings[0]);
StringBuilder res = new StringBuilder("");
URL ur;
HttpURLConnection urlConnection = null;
try{
ur = new URL(strings[0]);
urlConnection = (HttpURLConnection)ur.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1){
char current = (char)data;
res.append(current);
data = reader.read();
}
return res.toString();
}catch (Exception e){
e.printStackTrace();
return "failed";
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Handler h = new Handler(Looper.getMainLooper());
h.post(new Runnable() {
@Override
public void run() {
LayoutInflater inflater = (LayoutInflater)
getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = inflater.inflate(R.layout.popup_layout, null);
// create the popup window
int width = LinearLayout.LayoutParams.WRAP_CONTENT;
int height = LinearLayout.LayoutParams.WRAP_CONTENT;
final PopupWindow popupWindow = new PopupWindow(popupView, width, height, false);
// show the popup window
// which view you pass in doesn't matter, it is only used for the window tolken
popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
}
});
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
try {
//JSONObject jObject = new JSONObject(s);
//String weatherInfo = jObject.getString("number");
//Log.i("number",weatherInfo);
JSONArray arr = new JSONArray(s);
for (int i =0;i < arr.length(); i++){
JSONObject jpart = arr.getJSONObject(i);
String number = jpart.getString("number");
//numes.add(number);
String prc = jpart.getString("price");
numbersList.add(new Phonesnum(number,prc));
}
//ArrayAdapter<String> arad = new ArrayAdapter<String>(ListNumbers.this,android.R.layout.simple_list_item_1,numes);
NumberAdapter nmAdapter = new NumberAdapter(ListNumbers.this,numbersList);
lView.setAdapter(nmAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_numbers);
getSupportActionBar().setElevation(0);
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setCustomView(R.layout.title_bar);
numes = new ArrayList<>();
numbersList = new ArrayList<>();
lView = (ListView)findViewById(R.id.list_ve);
if (numes.size() == 0){
}
new Thread(new Getnumbers()).start();
}
class Getnumbers implements Runnable{
@Override
public void run() {
String result = null;
DownloadLink task = new DownloadLink();
try {
result = task.execute(url).get();
Log.i("result",result);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
здесь я поместил всплывающее окно в зависимости отпредыдущий вопрос здесь на веб-сайте .. но я не могу контролировать, когда показывать или скрывать всплывающее окно, потому что всплывающее окно создано в обработчике, и я не могу получить к нему доступ из метода onPostExecute .... я попытался и создал индикатор выполнения сраньше в глобальном разделе, затем я попытался получить к нему доступ из потока GetNumber, но он показал мне ошибку, потому что вы должны создать панель progess и накачать макет из основного потока