问题
This is the code which can only parse URI sources.
package com.example.xmlparserdeneme;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
ArrayList<String> titles = new ArrayList<String>();
Context ctx = this;
CustomAdapter adapter = null;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ctx = this;
new parseXML().execute();
Log.i("info2", titles.toString());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
class parseXML extends AsyncTask<String, Void, String> {
MySaxHandler handler;
@Override
protected String doInBackground(String... params) {
// ((Activity) ctx).setContentView(R.layout.activity_main);
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = null;
try {
parser = spf.newSAXParser();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
handler = new MySaxHandler();
try {
parser.parse("http://sosyalmedya.co/mobile-feed/", handler);
// parser.parse("file:///android_asset/DirenisDB.txt", handler);
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.i("info", titles.toString());
// Toast.makeText(ctx, "POST", Toast.LENGTH_LONG).show();
// setAdapter();
return "a";
}
@Override
protected void onPostExecute(String result) {
lv = (ListView) findViewById(R.id.listView);
lv.setAdapter(new CustomAdapter(titles, ctx));
}
public ArrayList<String> getArray() {
return titles;
}
public class MySaxHandler extends DefaultHandler {
StringBuffer chars;
public void startElement(String uri, String localName,
String qName, Attributes atts) {
chars = new StringBuffer();
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (localName.equalsIgnoreCase("key"))
titles.add(chars.toString());
}
public void characters(char ch[], int start, int length) {
chars.append(new String(ch, start, length));
}
}
}
}
I've spent almost 6 hours on it but I still couldn't figure it out.
I just want it to parse this(a file)
parser.parse("file:///android_asset/DirenisDB.txt", handler);
instead of this(URI)
parser.parse("http://sosyalmedya.co/mobile-feed/", handler);
.
I'd be appreciated if you can solve my problem.
回答1:
the json code which is going to be parsed must be in the layout/res/Raw folder. and this is the code to open the resource.
db = parse(getResources().openRawResource(R.raw.database));
来源:https://stackoverflow.com/questions/17471956/my-xml-parsersax-parser-parses-only-uri-source-how-can-i-parse-a-file-which-e