Java 未执行线程后的代码
我正在为android应用程序提取一些html。我遇到的一个问题是,下面代码中线程后面的代码没有被执行。我觉得我犯了一个业余的错误,但我不知道这是什么。我知道ArrayList正在被填充,通过createTimeline()方法将其内容打印到logcat中。 但是,Java 未执行线程后的代码,java,android,Java,Android,我正在为android应用程序提取一些html。我遇到的一个问题是,下面代码中线程后面的代码没有被执行。我觉得我犯了一个业余的错误,但我不知道这是什么。我知道ArrayList正在被填充,通过createTimeline()方法将其内容打印到logcat中。 但是,})之后的任何内容。start()未完成。有什么想法吗 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc
})之后的任何内容。start()代码>未完成。有什么想法吗
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_online_timetable);
Intent intent = getIntent();
value = intent.getStringExtra("url");
new Thread(new Runnable() {
public void run() {
try {
Log.d("url",value);
doc = Jsoup.connect(value).get();
Element monday = doc.select("p ~ table").first();
Element tuesday = doc.select("p ~ table").get(1);
Element wednesday = doc.select("p ~ table").get(2);
Element thursday = doc.select("p ~ table").get(3);
Element friday = doc.select("p ~ table").get(4);
monday.select("tr:eq(0)").remove();
tuesday.select("tr:eq(0)").remove();
wednesday.select("tr:eq(0)").remove();
thursday.select("tr:eq(0)").remove();
friday.select("tr:eq(0)").remove();
final Elements mon = monday.select("td");
final Elements tues = tuesday.select("td");
final Elements wed = wednesday.select("td");
final Elements thurs = thursday.select("td");
final Elements fri = friday.select("td");
Log.d("thread","sdsddssd");
createTimetable(monClasses, mon, day1);
createTimetable(tuesClasses, tues, day2);
createTimetable(wedClasses, wed, day3);
createTimetable(thurClasses, thurs, day4);
createTimetable(friClasses, fri, day5);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
Log.d("sdfsdfsdf", "HELLO");
for(int i = 0; i<monClasses.size();i++)
{
Log.d("monday", monClasses.get(i).toString());
}
mSectionsPagerAdapter = new SectionsPagerAdapter(
getSupportFragmentManager());
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u display\u online\u时间表);
Intent=getIntent();
value=intent.getStringExtra(“url”);
新线程(newrunnable()){
公开募捐{
试一试{
Log.d(“url”,值);
doc=Jsoup.connect(value.get();
元素monday=doc.select(“p~表”).first();
元素星期二=doc.select(“p~表”).get(1);
元素星期三=doc.select(“p~表”).get(2);
元素星期四=doc.select(“p~表”).get(3);
元素星期五=文件选择(“p~表”).get(4);
星期一。选择(“tr:eq(0)”。删除();
星期二。选择(“tr:eq(0)”)。删除();
星期三。选择(“tr:eq(0)”)。删除();
星期四。选择(“tr:eq(0)”)。删除();
选择(“tr:eq(0)”).remove();
最终元素周一=周一。选择(“td”);
最终要素周二=周二。选择(“td”);
最终元素wed=周三。选择(“td”);
最终元素周四=周四。选择(“td”);
最终要素fri=周五。选择(“td”);
Log.d(“线程”、“SDDSSD”);
创建时间表(周一、周一、第1天);
创建时间表(星期二,星期二,第2天);
创建时间表(周三,周三,第3天);
创建时间表(周四课程,周四,第4天);
创建时间表(周五、周五、第5天);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}).start();
Log.d(“sdfsdfsdf”,“你好”);
对于(int i=0;i我想您来自传统的java开发,所以这里有一句警告:线程和Android互不喜欢。请将您的线程切换到,然后重试,只需更改几行代码
基本上,将所有代码复制到doInBackground()
方法,然后调用task.execute()
。
您想对生成的数据执行的所有操作都应该进入异步任务的onPostExecute()
方法。您甚至可以使用publishResult()
和onResultPublished()
请注意,这可能是同步运行的,但您不必担心这一点。既然您在线程之后没有做任何UI工作,那么您就不能在finally子句中做这些工作吗
如果您依赖此线程收集数据以填充视图,则应使用AsyncTask。尝试将线程分配给变量,并在onCreate方法的末尾启动该线程变量是否可以发布logcat的输出?您应该尝试将发布的代码减少到最小的片段,以重现您的问题。这显然没有实现与一周中的每一天有关,所有这些都让问题难以通读,我将尝试这个异步任务。它看起来有点混乱,但我会解决的。异步任务是android上的一种方式,我不会称之为混乱