У меня проблема с классом AsyncTask - PullRequest
0 голосов
/ 06 ноября 2019

Мое приложение падает, когда ссылка пуста. Я пытаюсь скачать видео из Instagram. Приложения отлично работают с публичными ссылками. Но я поставил приватную ссылку, приложение вылетает. Это означает, что с частной ссылкой приложения не получают HTML с веб-сайта. И ссылки для скачивания остаются пустыми. Что приводит к сбою приложения. Я хочу, чтобы при входе в приложение частной ссылки не происходило аварийное завершение

Я пытался использовать операторы if-else в методе onPostExecute, но это не сработало или, возможно, я делаю это неправильно.

Этот класс AsyncTask

private class InstaVideo extends AsyncTask<Void, Void, Void> {

        String dlink, imglink;

        @Override
        protected void onPreExecute() {
            ProgressBar progressBar = (ProgressBar) findViewById(R.id.loading_indicator);
            progressBar.setVisibility(View.VISIBLE);
            DoubleBounce doubleBounce = new DoubleBounce();
            progressBar.setIndeterminateDrawable(doubleBounce);
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... voids) {
            try {
                Document doc = Jsoup.connect("https://www.10insta.net/#grid-gallery")
                        .data("url", temp)
                        .post();
                Log.v("Hello", doc.title());
                Element srctag = doc.select("img.card-img-top").first();
                Element ptag = doc.select("p.card-text").first();
                Element atag = ptag.select("a").first();
                imglink = srctag.attr("src");
                dlink = "https://www.10insta.net/";
                dlink += atag.attr("href");
                Log.i("DownloadActivity",dlink);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            if (dlink=="https://www.10insta.net/download.php?url=") {
                Toast.makeText(DownloadActivity.this,"Link is private",Toast.LENGTH_SHORT).show();

            } else {
                View loadingIndicator = findViewById(R.id.loading_indicator);
                loadingIndicator.setVisibility(View.GONE);
                TextView t = (TextView) findViewById(R.id.imgtxt);
                if (Content.id == 2) {
                    t.setText("Video Preview");
                } else {
                    t.setText("Image Preview");
                }
                t.setVisibility(View.VISIBLE);
                Button b = (Button) findViewById(R.id.instadownload);
                b.setVisibility(View.VISIBLE);
                final ImageView img = (ImageView) findViewById(R.id.instaimg);
                Picasso.get().load(imglink).placeholder(R.drawable.loading).into(img);
                b.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                        Uri uri = Uri.parse(dlink);
                        DownloadManager.Request req = new DownloadManager.Request(uri);
                        req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                        if (Content.id == 2) {
                            req.setDestinationInExternalPublicDir("/VideoDownloader", "insta.mp4");
                        } else {
                            req.setDestinationInExternalPublicDir("/VideoDownloader", "insta.jpg");
                        }
                        StyleableToast.makeText(getBaseContext(), "Download Started", Toast.LENGTH_SHORT, R.style.mytoast).show();
                        Long ref = dm.enqueue(req);
                    }
                });
            }
        }
    }

doInBackground извлекает HTML с веб-сайта и фильтрует необходимую ссылку для загрузки видео. Это хорошо работает с общедоступными ссылками, но вылетает с частными ссылками. Теперь я хочу, чтобы при входе в личную ссылку приложение не зависало. Помощь очень ценится Ошибка изображения

1 Ответ

1 голос
/ 06 ноября 2019

Поскольку вы упомянули, if-else не работает для проверки пути к изображению, попробуйте использовать исключение, используя блок try - catch.

try {
    Picasso.get().load(imglink).placeholder(R.drawable.loading).into(img);
} catch(Exception ex) {
    ex.printStackTrace();
    t.setVisibility(View.GONE);
    b.setVisibility(View.GONE);
}

Помимо этого , вы используете == оператор для сравнения строк, которые дают вам false всегда. Попробуйте использовать equals()/equalsIgnoreCase()

if (dlink.equalsIgnoreCase("https://www.10insta.net/download.php?url="))
...