2017-08-18 13 views
0

Je sais que cette question a déjà beaucoup de réponses mais rien ne semble fonctionner pour moi je ne sais pas où je me trompe s'il vous plaît avoir regarder sur mon ci-dessous code. J'avais aussi utilisé beaucoup d'exemples mais rien ne fonctionne pour moi.Vous voulez afficher le texte et l'image de l'URL dans un textview pas d'exemples disponibles fonctionnent

 txt = (TextView) findViewById(R.id.txt); 

    String html = "Hello " + 
      "<img src='http://www.gravatar.com/avatar/" + 
      "f9dd8b16d54f483f22c0b7a7e3d840f9?s=32&d=identicon&r=PG'/>" + 
      " This is a test " + 
      "<img src='http://www.gravatar.com/avatar/a9317e7f0a78bb10a980cadd9dd035c9?s=32&d=identicon&r=PG'/>"; 
    spannedValue = Html.fromHtml(html,getImageHTML(),null); 
    txt.setText(spannedValue); 

Ceci est ma méthode get Drawer.

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

    new LoadImage().execute(source, d); 


    return null; 
} 

Ceci est ma classe Image loader Où j'ai également vérifié avec l'URL codée en dur également.

 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 { 

      URL url = new URL("https://www.gochatin.com/cdn/emoji/v1.0/assets/png/master/emoji_u1f601.png 
"); 





      Log.d("url",url.toString()); 
      return 
      BitmapFactory.decodeStream(url.openConnection().getInputStream()); 

      /*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) { 
      Log.d(TAG, "onPostExecuteafter" + bitmap); 
      BitmapDrawable d = new BitmapDrawable(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 = txtMsg.getText(); 
      txtMsg.setText(t); 
     } 
    } 
} 

Répondre

0

Enfin, j'ai résolu mon problème. C'est ainsi que j'ai corrigé.

 txtMsg.setText(Html.fromHtml(m.getMessage(),new ImageGetter(), null)); 

Ci-dessous est ma méthode imagegetter.

 public class ImageGetter implements Html.ImageGetter { 

    public Drawable getDrawable(String source) { 
     int id; 
     Log.d("source",source); 


     Bitmap bitmap = null; 
     try { 
      bitmap = new LoadImage().execute(source).get(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 
     Drawable d =new BitmapDrawable(getResources(),bitmap); 
     d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight()); 
     return d; 
    } 

} 

Ceci est mon ImageLoader classe

 class LoadImage extends AsyncTask<String, Void, Bitmap> { 

    private LevelListDrawable mDrawable; 

    @Override 
    protected Bitmap doInBackground(String... params) { 

     try { 

      url=new URL(params[0]); 
      // url = new URL("http://www.gravatar.com/avatar/a9317e7f0a78bb10a980cadd9dd035c9?s=32&d=identicon&r=PG"); 
      bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
      /* runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        // tasteimf.setImageBitmap(bitmap); 
        textviewt.setText(Html.fromHtml(html,new ImageGetter(), null)); 
       } 
      });*/ 
      Log.d("image",bitmap.toString()); 
      // bitmap = Picasso.with(MainActivity.this).load("http://www.gravatar.com/avatar/a9317e7f0a78bb10a980cadd9dd035c9?s=32&d=identicon&r=PG").get(); 
      Log.d("bitmap",bitmap.toString()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     Log.d(TAG, "onPostExecute drawable " + mDrawable); 
     Log.d(TAG, "onPostExecute bitmap " + bitmap); 
     if (bitmap != null) { 
      Log.d(TAG, "onPostExecuteafter" + bitmap); 
      // myMethod(bitmap); 

      CharSequence charSequence = textviewt.getText(); 
      textviewt.setText(charSequence); 

     } 

    } 
}