[英]Html.toHtml with Spanned cast (ClassCastException) <Android>
[英]Spanned and html format in Android
我需要在android應用程序的html輸出中格式化此字符串:
<a href=http://www.mywebpage.net?ID=764>My remote pics</a>
並嘗試了ListView中的Spanned方法 :
Spanned varHtml = Html.fromHtml(var.toString());
ArrayList<String> planetList = new ArrayList<String>();
planetList.addAll(Arrays.asList(varHtml));
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow,
R.id.rowTextView, planetList);
listAdapter.addAll(varHtml.toString());
mainListView.setAdapter(listAdapter);
但是我在這一行中有這個錯誤,為什么?
listAdapter.addAll(varHtml.toString());
錯誤
The method addAll(Collection<? extends String>) in the
type ArrayList<String> is not applicable for the
arguments (List<Spanned>)
編輯
ListView動態數據的完整Java類:
public class news extends Activity {
private static final String SOAP_ACTION = "http://www.xxxxx.com/WebService/GetNews";
private static final String OPERATION_NAME = "GetNews";
private static final String WSDL_TARGET_NAMESPACE = "http://www.xxxxx.com/GetNews";
private static final String SOAP_ADDRESS = "http://www.xxxxx.com/GetNews.asmx";
private ListView mainListView;
private ArrayAdapter<String> listAdapter;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mains);
mainListView = (ListView) findViewById(R.id.mainListView);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
OPERATION_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.implicitTypes = false;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
httpTransport.debug = true;
envelope.setOutputSoapObject(request);
try {
httpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
//Remote string
String RemoteString = response.toString();
Log.i("RemoteString", RemoteString.toString());
//Replace in remote string
String RemoteStringnew = RemoteString.replaceAll("<br />", "\n");
Log.i("RemoteStringnew", RemoteStringnew);
//Split in remote string
String[] var = RemoteStringnew.split("\n");
//Spanned in remote string
Spanned varHtml = Html.fromHtml(var.toString());
Log.i("varHtml", varHtml.toString());
ArrayList<String> planetList = new ArrayList<String>();
planetList.addAll(Arrays.asList(varHtml.toString()));
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow,
R.id.rowTextView, planetList);
listAdapter.add(varHtml.toString());
mainListView.setAdapter(listAdapter);
} catch (Exception exception) {
Log.i("Error: ", exception.toString());
}
}
}
編輯
遠程字符串為:
https://www.LinkFromImageonTheGoogle.net/myImage.png<br />23/03/2014<br /><a href=http://www.mywebpage.net?ID=764>My remote pics</a><br /><br />
https://www.LinkFromImageonTheGoogle.net/myImage1.png<br />22/03/2014<br /><a href=http://www.mywebpage.net?ID=765>My remote pics 1</a><br /><br />
https://www.LinkFromImageonTheGoogle.net/myImage2.png<br />21/03/2014<br /><a href=http://www.mywebpage.net?ID=766>My remote pics 2</a><br /><br />
編輯2
private ListView mainListView;
private ArrayAdapter<String> listAdapter;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mains);
mainListView = (ListView) findViewById(R.id.mainListView);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
OPERATION_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.implicitTypes = false;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
httpTransport.debug = true;
envelope.setOutputSoapObject(request);
try {
httpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
// Remote string
String RemoteString = response.toString();
Log.i("RemoteString", RemoteString.toString());
// Replace in remote string
// it's not needed
RemoteString = RemoteString.replaceAll("<br />", "\n");
Log.i("RemoteStringnew", RemoteString);
// Split in remote string
String[] var = RemoteString.split("\\\\r?\\\\n");// new line
// Spanned in remote string
ArrayList<String> planetList = new ArrayList<String>();
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow,
R.id.rowTextView, planetList);
// listAdapter.add(varHtml.toString());
for (String html : var) {
Spanned varHtml = Html.fromHtml(html);
Object[] strings = varHtml.getSpans(0, html.length(),
Object.class);
// List<String> urls = new ArrayList<String>();
for (Object obj : strings) {
if (obj instanceof URLSpan) {
URLSpan urlSpan = (URLSpan) obj;
planetList.add(urlSpan.getURL());
}
}
}
mainListView.setAdapter(listAdapter);
} catch (Exception exception) {
Log.i("Error: ", exception.toString());
}
}
編輯3
我需要以下輸出:
https://www.LinkFromImageonTheGoogle.net/myImage.png ( I need show the image not link to image )
23/03/2014
My remote pics (with link active http://www.mywebpage.net?ID=764)
https://www.LinkFromImageonTheGoogle.net/myImage1.png ( I need show the image not link to image )
22/03/2014
My remote pics 1 (with link active http://www.mywebpage.net?ID=765)
https://www.LinkFromImageonTheGoogle.net/myImage2.png ( I need show the image not link to image )
21/03/2014
My remote pics 2 (with link active http://www.mywebpage.net?ID=766)
編輯4
mains.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/mainListView">
</ListView>
</LinearLayout>
simplerow.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rowTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
addAll
想要添加項目的Collection
。
在這種情況下,您應該使用采用String
add
方法。
將指定的元素追加到此列表的末尾。
更改
listAdapter.addAll(varHtml.toString());
至
listAdapter.add(varHtml.toString());
那就是你應該做什么
String html = "<a href=http://www.mywebpage.net?ID=764>My remote pics</a>"; // the HTML to read
Spanned spanned = Html.fromHtml(html);
Object[] strings = spanned.getSpans(0, html.length(), Object.class);
List<String> urls = new ArrayList<String>();
for (Object obj : strings)
{
if (obj instanceof URLSpan)
{
URLSpan urlSpan = (URLSpan) obj;
urls.add(urlSpan.getURL());
}
}
它將讀取每個網址,並將所有內容添加到urls
列表中。 您可以直接更新列表或執行
listAdapter.addAll(urls);
這是怎么做的;
public class news extends Activity {
private static final String SOAP_ACTION = "http://www.xxxxx.com/WebService/GetNews";
private static final String OPERATION_NAME = "GetNews";
private static final String WSDL_TARGET_NAMESPACE = "http://www.xxxxx.com/GetNews";
private static final String SOAP_ADDRESS = "http://www.xxxxx.com/GetNews.asmx";
private ListView mainListView;
private ArrayAdapter<String> listAdapter;
@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mains);
mainListView = (ListView) findViewById(R.id.mainListView);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
OPERATION_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.implicitTypes = false;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
httpTransport.debug = true;
envelope.setOutputSoapObject(request);
try {
httpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
//Remote string
String RemoteString = response.toString();
Log.i("RemoteString", RemoteString.toString());
//Replace in remote string
// it's not needed
RemoteString = RemoteString.replaceAll("<br />", "\n");
Log.i("RemoteStringnew", RemoteString);
//Split in remote string
String[] var = RemoteString.split("\\\\r?\\\\n");// new line
//Spanned in remote string
ArrayList<String> planetList = new ArrayList<String>();
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow,
R.id.rowTextView, planetList);
listAdapter.add(varHtml.toString());
for (String html : var)
{
Spanned varHtml = Html.fromHtml(html);
Object[] strings = varHtml.getSpans(0, html.length(), Object.class);
List<String> urls = new ArrayList<String>();
for (Object obj : strings)
{
if (obj instanceof URLSpan)
{
URLSpan urlSpan = (URLSpan) obj;
planetList.add(urlSpan.getURL());
}
}
}
mainListView.setAdapter(listAdapter);
} catch (Exception exception) {
Log.i("Error: ", exception.toString());
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.