Android TagHandler exception

I am developing an Android application and I need to display the HTLM tags (also <li) in the text box. For this, I found this TagHandler , but it raises

java.lang.RuntimeException: range PARAGRAPH must begin with paragraph border

I tried to understand why, but I could not find a solution. I am brand new to Android, so please help me out.

public class HtmlTagHandler implements Html.TagHandler { private int mListItemCount = 0; private Vector<String> mListParents = new Vector<String>(); @Override public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) { if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) { if (opening) { mListParents.add(tag); } else mListParents.remove(tag); mListItemCount = 0; } else if (tag.equals("li") && !opening) { handleListTag(output); } } private void handleListTag(Editable output) { if (mListParents.lastElement().equals("ul")) { output.append("\n"); String[] split = output.toString().split("\n"); int lastIndex = split.length - 1; int start = output.length() - split[lastIndex].length() - 1; output.setSpan(new BulletSpan(15 * mListParents.size()), start, output.length(), 0); } else if (mListParents.lastElement().equals("ol")) { mListItemCount++; output.append("\n"); String[] split = output.toString().split("\n"); int lastIndex = split.length - 1; int start = output.length() - split[lastIndex].length() - 1; output.insert(start, mListItemCount + ". "); output.setSpan(new LeadingMarginSpan.Standard(15 * mListParents.size()), start, output.length(), 0); } } } 
+5
source share
1 answer

Finding an error, just deciding adding this if(start<output.length()) to

 output.setSpan() 

The correct and working code is as follows:

 public class HtmlTagHandler implements Html.TagHandler { private int mListItemCount = 0; private Vector<String> mListParents = new Vector<String>(); @Override public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) { if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) { if (opening) { mListParents.add(tag); } else mListParents.remove(tag); mListItemCount = 0; } else if (tag.equals("li") && !opening) { handleListTag(output); } } private void handleListTag(Editable output) { if (mListParents.lastElement().equals("ul")) { output.append("\n"); String[] split = output.toString().split("\n"); int lastIndex = split.length - 1; int start = output.length() - split[lastIndex].length() - 1; if(start<output.length()) output.setSpan(new BulletSpan(15 * mListParents.size()), start, output.length(), 0); } else if (mListParents.lastElement().equals("ol")) { mListItemCount++; output.append("\n"); String[] split = output.toString().split("\n"); int lastIndex = split.length - 1; int start = output.length() - split[lastIndex].length() - 1; output.insert(start, mListItemCount + ". "); if(start<output.length()) output.setSpan(new LeadingMarginSpan.Standard(15 * mListParents.size()), start, output.length(), 0); } } } 

Update:

After some other problems with the code above, I developed this code that works without exception, I hope this would be useful.

 public class HtmlTagHandler implements Html.TagHandler { private int mListItemCount = 0; private Vector<String> mListParents = new Vector<String>(); private Vector<Integer> mListCounter = new Vector<Integer>(); @Override public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) { if (tag.equals("ul") || tag.equals("ol") ) { if (opening) { mListParents.add(mListParents.size(),tag); mListCounter.add(mListCounter.size(), 0); } else { Log.d("Bohhh"," tolgo "+mListParents.get(mListParents.size()-1)); mListParents.removeElementAt(mListParents.size()-1); Log.d("Bohhh","lunghezza "+mListParents.size()); mListCounter.removeElementAt(mListCounter.size()-1); } } else if (tag.equals("li") && opening) { handleListTag(output); } } private void handleListTag(Editable output) { if (mListParents.lastElement().equals("ul")) { if(output.length()!=0) output.append("\n"); for(int i=1;i<mListCounter.size();i++) output.append("\t"); output.append("• "); } else if (mListParents.lastElement().equals("ol")) { mListItemCount= mListCounter.lastElement()+1; if(output.length()!=0) output.append("\n"); for(int i=1;i<mListCounter.size();i++) output.append("\t"); output.append( mListItemCount + ". "); mListCounter.removeElementAt(mListCounter.size()-1); mListCounter.add(mListCounter.size(), mListItemCount); } } } 
+7
source

Source: https://habr.com/ru/post/1206815/


All Articles