java.net.MalformedURLException: протокол не найден - PullRequest
0 голосов
/ 30 мая 2018

Я разрабатываю <новостное приложение, и мне нужно последовательно отображать изображения и текст в Textview.<a href="https://metbuat.az/news/957814/mediada-tesadufi-adamlar-coxdur.html" rel="nofollow noreferrer"> Это точные новости, которые я хочу отображать в приложении.

Итак, я написал следующий код:

public class NewsActivity extends AppCompatActivity implements FeedAdapter.OnItemClickListener, Html.ImageGetter
{

TextView textViewBody;

@Override
protected void onCreate(Bundle savedInstanceState)
{ 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_news);

    textViewBody = findViewById(R.id.textview_newsBody);
    Intent intent = getIntent();
    String body = intent.getStringExtra(EXTRA_BODY);
    body = body.replace("&lt;", "<").replace("&gt;", ">");
    Spanned spanned = Html.fromHtml(body, this, null);
    textViewBody.setText(spanned);
}

@Override
public Drawable getDrawable(String source)
{
    LevelListDrawable drawable = new LevelListDrawable();
    Drawable empty = getResources().getDrawable(R.drawable.ic_arxiv);
    drawable.addLevel(0, 0, empty);
    drawable.setBounds(0,0,empty.getIntrinsicWidth(), empty.getIntrinsicHeight());

    new LoadImage().execute(source, drawable);
    return drawable;
}

class LoadImage extends AsyncTask<Object, Void, Bitmap>
{
    private LevelListDrawable mDrawable;

    @Override
    protected Bitmap doInBackground(Object... params) {
        String source = (String) params[0];
        mDrawable = (LevelListDrawable) params[1];
        Log.d(TAG, "doInBackground " + source);
        try {
            InputStream is = new URL(source).openStream();
            return BitmapFactory.decodeStream(is);
        }  catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) 
    {
        Log.d(TAG, "onPostExecute drawable " + mDrawable);
        Log.d(TAG, "onPostExecute bitmap " + bitmap);
        if (bitmap != null) {
            BitmapDrawable d = new BitmapDrawable(getApplicationContext().getResources(), bitmap);
            mDrawable.addLevel(1, 1, d);
            mDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
            mDrawable.setLevel(1);
            // i don't know yet a better way to refresh TextView
            // mTv.invalidate() doesn't work as expected
            CharSequence t = textViewBody.getText();
            textViewBody.setText(t);
            textViewBody.refreshDrawableState();
        }
    }
}

Я получаю исключение MalformedURLEx для каждого изображения при попытке открыть эту новость:

W/System.err: java.net.MalformedURLException: Protocol not found: "https://metbuat.az/uploads/295/7f54088035-img6105.jpg"

Если я копирую-вставляюURL к браузеру в порядке и протокол уже предоставлен.

Почему я все еще получаю это исключение?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Используется glay esay, чтобы показать, что изображение добавлено ниже зависимости в файл gradle уровня приложения.

implementation 'com.github.bumptech.glide:glide:4.7.1'

, затем создайте код, подобный этому.

    // if activity then pass only this and fragment then pass getActivity()
    Glide.with(this)
            .load("https://metbuat.az/uploads/295/7f54088035-img6105.jpg")
            .into(imageview);
0 голосов
/ 30 мая 2018

Следовательно, измените строку:

InputStream is = new URL(source).openStream();

как

InputStream is = new URL(source.replace("&quot;", "\"")).openStream();
...