2015-12-17 8 views
6

Ich habe JSON Wert abgerufen, sie zeigen in android TextView Dies ist meine Probe JSON Wertimg src-Attribut von json Wert kleines blaues farbiges Feld in Android Textview zeigt

"introtext": "The District Administration Office has sealed the case was underway.<img src="images/dec_09_Lazimpat_road_b.JPG" alt="" />" 

I Apache Common lang Liabrary verwendet, um HTML-Attribut zu entkommen und Stile wie diese.

String str = org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4(stringValue); 

und ich habe den Wert auf TextView wie diese

textView.setText(Html.fromHtml(str)); 

Alles gesetzt arbeitete bis hier in Ordnung, aber die text in TextView ist wie in diesem Bild gezeigt

enter image description here

Diese kleine blaue Box wird angezeigt, in der img src Attribut vorhanden ist. Ich habe zu lange Zeit damit verschwendet, das zu entfernen. Bitte helfen Sie mir, wie Sie diese Box von TextView entfernen. Jede Hilfe wird geschätzt.

+0

html Bild wird die Live-URL hat? – user1140237

+0

@ user1140237 yah selben von ihnen haben ... –

Antwort

3

diesen Code Versuchen:

String s = "The District Administration Office has sealed the case was underway.<img src="images/dec_09_Lazimpat_road_b.JPG" alt="" />"; 
String str = Html.fromHtml(s).toString(); 
///// Remove all img tags using Regular Expression 
str = str.replaceAll("[<](/)?img[^>]*[>]", ""); 
textView.setText(Html.fromHtml(str)); 
+0

Einige der Tags img src haben eine URL. Und was kann für diese getan werden? Ich warte auf eine andere Antwort, also werde ich es bald als korrekt prüfen. Danke für deine Antwort. Es war großartig ... –

+0

Willst du die URL behalten? –

+0

yah Wenn es .. Gibt es eine Möglichkeit, URL vor dem Ersetzen der Zeichenfolge zu greifen? –

1

Um zu BitmapDrawable & ImageGetter von HTML verwenden müssen Bild mit HTML-Inhalt angezeigt werden soll. ImageGetter Mit herunterladen müssen Bild, um es in Bitmap und dislay in Textview konvertieren mit Html.fromHtml mit HTML-Inhalt & Instanz der Html.ImageGetter

Im Folgenden werde ich die Dinge geben, um das Problem in Frage erwähnt zu lösen haben

Vorschlag Ich empfehle Ihnen, WebView für den Inhalt zu verwenden, wo Sie HTML-Text anzeigen müssen

HTMLIma geDrawable

public class HTMLImageDrawable extends BitmapDrawable { 

    protected Drawable drawable; 

    @Override 
    public void draw(Canvas canvas) { 
     if (drawable != null) { 
      drawable.draw(canvas); 
     } 
    } 
} 

HtmlImageParser

public class HtmlImageParser implements ImageGetter { 
    public static final String LOG = HtmlImageParser.class.getName(); 
    Context c; 
    View container; 

    public HtmlImageParser(View t, Context c) { 
     this.c = c; 
     this.container = t; 
    } 

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    public Drawable getDrawable(String source) { 
     try { 
      HTMLImageDrawable urlDrawable = new HTMLImageDrawable(); 
      ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(
        urlDrawable); 

      if (Build.VERSION.SDK_INT < 11) { 
       asyncTask.execute(source); 
      } else { 
       asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, source); 
      } 
      return urlDrawable; 
     } catch (Exception e) { 
      Log.e(LOG, e.getMessage()); 
     } 
     return null; 

    } 

    public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> { 
     HTMLImageDrawable urlDrawable; 

     public ImageGetterAsyncTask(HTMLImageDrawable d) { 
      this.urlDrawable = d; 
     } 

     @Override 
     protected Drawable doInBackground(String... params) { 
      String source = params[0]; 
      return fetchDrawable(source); 
     } 

     @Override 
     protected void onPostExecute(Drawable result) { 
      try { 
       if (urlDrawable != null) { 
        urlDrawable.setBounds(0, 0, 0 + result.getIntrinsicWidth(), 
          0 + result.getIntrinsicHeight()); 

        urlDrawable.drawable = result; 
        HtmlImageParser.this.container.invalidate(); 
       } 

      } catch (Exception e) { 
       Log.e(LOG, e.getMessage()); 
      } 
     } 


     public Drawable fetchDrawable(String urlString) { 
      try { 
//    InputStream is = fetch(urlString); 
       URL imageURL = new URL(urlString); 
       InputStream inputStream = imageURL.openStream(); 
       Drawable drawable = Drawable.createFromStream(inputStream, "src"); 
       drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(), 
         0 + drawable.getIntrinsicHeight()); 
       return drawable; 
      } catch (Exception e) { 
       return null; 
      } 
     } 


    } 
} 

über zwei Klassen hinzufügen.

Sets von HTML-Text zu Textview

TextView htmltext = (TextView) view.findViewById(R.id.htmltext); 
    HtmlImageParser clsUrlimageparser = new HtmlImageParser(htmltext.getRootView(), getActivity()); 

    String imageviewBaseURL = "http://tfwiki.net/mediawiki/images2/thumb/8/8c/"; 

    //For multiple image if base url is fix & image path is relative 
    String img1 = imageviewBaseURL + "AOE_optimus_reformatted.jpg/180px-AOE_optimus_reformatted.jpg"; 
    String img2 = imageviewBaseURL + "AnimeMach.jpg/82px-AnimeMach.jpg"; 
    String text = "Android test image text" + 
      "<br /> <img style='width:304px;height:228px;' src='" + img1 + "'/>" + 
      "<br /> <img style='width:304px;height:228px;' src='" + img2 + "'/>"; 
    htmlSpan = Html.fromHtml(text, clsUrlimageparser, null); 
    htmltext.setText(htmlSpan); 
+0

Die Bildpfade im 'src' Tag sind relativ, nicht absolut. Bilder werden daher nicht heruntergeladen. –

+0

@EricB. Okay, was ist mit der Basis-URL? – user1140237

+0

Wir wissen nicht, ob das OP die Basis-URL hat oder nicht. Zweitens wird davon abgeraten, den 'DefaultHttpClient' zu verwenden, stattdessen sollten Sie' HttpURLConnection' verwenden. –

0

Dieser Code

public Drawable fetchDrawable(String urlString) { 
    try { 
     URL imageURL = new URL(urlString); 
     InputStream inputStream = imageURL.openStream(); 
     Drawable drawable = Drawable.createFromStream(inputStream, "src"); 
     drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(), 
       0 + drawable.getIntrinsicHeight()); 
     return drawable; 
    } catch (Exception e) { 
     return null; 
    } 
} 

Gibt mir wie unten

enter image description here