sách gpt4 ai đã đi

Làm thế nào để thiết lập luồng và trình xử lý cho trình phân tích cú pháp SAX?

In lại 作者:行者123 更新时间:2023-11-29 22:19:31 38 4
mua khóa gpt4 Nike

我一直在尝试为 SAX 解析器设置 UI 线程和处理程序。这是我没有实现 UI 线程和处理程序的解析器:

public class AndroidXMLReader extends ListActivity {

private XMLFeed myXMLFeed = null;


/** Called when the activity is first created. */
@Ghi đè
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
thiết lậpContentView(R.layout.main);
thử {
URL xmlUrl = new URL("http://feeds.bbci.co.uk/news/uk/rss.xml");
SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
XMLReader myXMLReader = mySAXParser.getXMLReader();
XMLHandler myXMLHandler = new XMLHandler();
myXMLReader.setContentHandler(myXMLHandler);
InputSource myInputSource = new InputSource(xmlUrl.openStream());
myXMLReader.parse(myInputSource);

myXMLFeed = myXMLHandler.getFeed();

}

catch (MalformedURLException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
catch (ParserConfigurationException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
catch (SAXException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
catch (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}

if (myXMLFeed!=null)
{
ArrayAdapter adapter =
new ArrayAdapter(this,
android.R.layout.simple_list_item_1,myXMLFeed.getList());
setListAdapter(adapter);
}
}
}

然后我尝试添加 UI 线程和处理程序。 编辑 1 - 这是根据 HellBoy 的回复修改后的代码:

   public class AndroidXMLReader extends ListActivity {

private static final int THREAD_FINISHED = 0;
private XMLFeed myXMLFeed = null;
private ProgressDialog progressDialog;
private Button refreshFeed;
Handler handler = new Handler();

/** Called when the activity is first created. */
@Ghi đè
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
thiết lậpContentView(R.layout.main);

initControls();
}

public void initControls(){


refreshFeed = (Button) findViewById(R.id.refresh);

refreshFeed.setOnClickListener(new Button.OnClickListener(){
@Ghi đè
public void onClick(View v){
progressDialog = ProgressDialog.show(AndroidXMLReader.this, "",
"Please wait for few seconds...", true);
processThread();
}
});
}
protected void processThread() {
Thread t = new Thread()
{
public void run(){
getNews();
//UI();
// Sends message to the handler so it updates the UI
handler.sendMessage(Message.obtain(mHandler, THREAD_FINISHED));

; }
};
t.start();
}

private Handler mHandler = new Handler() {
@Ghi đè
public void handleMessage(Message msg) {
super.handleMessage(msg);

switch (msg.what) {
case THREAD_FINISHED:

progressDialog.dismiss();
phá vỡ;
};

};
};

private void getNews(){
thử {
URL xmlUrl = new URL("http://feeds.bbci.co.uk/news/uk/rss.xml");
SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
XMLReader myXMLReader = mySAXParser.getXMLReader();
XMLHandler myXMLHandler = new XMLHandler();
myXMLReader.setContentHandler(myXMLHandler);
InputSource myInputSource = new InputSource(xmlUrl.openStream());
myXMLReader.parse(myInputSource);

myXMLFeed = myXMLHandler.getFeed();

}

catch (MalformedURLException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
catch (ParserConfigurationException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
catch (SAXException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}
catch (IOException e) {
// TODO Khối catch được tạo tự động
e.printStackTrace();
}

if (myXMLFeed!=null){
ArrayAdapter adapter =
new ArrayAdapter(this,
android.R.layout.simple_list_item_1,myXMLFeed.getList());
setListAdapter(adapter);
}

}
}

目前它卡在进度对话框中,我不明白为什么...任何帮助将不胜感激。

编辑 1 - 我现在收到的错误消息是:

Only the original thread that created a view hierarchy can touch its views.

    10-04 21:39:27.570: ERROR/AndroidRuntime(17454): at com.android.testfeed3.AndroidXMLReader.getNews(AndroidXMLReader.java:121)
10-04 21:39:27.570: ERROR/AndroidRuntime(17454): at com.android.testfeed3.AndroidXMLReader.access$2(AndroidXMLReader.java:85)
10-04 21:39:27.570: ERROR/AndroidRuntime(17454): at com.android.testfeed3.AndroidXMLReader$3.run(AndroidXMLReader.java:60)
10-04 21:39:27.645: WARN/ActivityManager(2703): Force finishing activity com.android.testfeed3/.AndroidXMLReader
10-04 21:39:33.495: ERROR/WindowManager(17454): Activity com.android.testfeed3.AndroidXMLReader has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40527a20 that was originally added here
10-04 21:39:33.495: ERROR/WindowManager(17454): android.view.WindowLeaked: Activity com.android.testfeed3.AndroidXMLReader has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40527a20 that was originally added here
10-04 21:39:33.495: ERROR/WindowManager(17454): at com.android.testfeed3.AndroidXMLReader$2.onClick(AndroidXMLReader.java:50)

Bất kỳ sự giúp đỡ nào cũng sẽ được đánh giá cao.

1 Câu trả lời

为了更改 UI,命令必须来自创建它的线程,即主(或 UI)线程。

快速浏览一下,这一行:

if (myXMLFeed!=null)
{
ArrayAdapter adapter =
new ArrayAdapter(this,
android.R.layout.simple_list_item_1,myXMLFeed.getList());
setListAdapter(adapter);
}

需要放在一个单独的处理程序中,并从您的新线程调用该处理程序。

关于sax - 如何为 SAX 解析器设置线程和处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7630332/

38 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com