Android java.lang.RuntimeException:使用jsoup执行doInBackground()时出错
我是Android开发的初学者,我遇到了这样一个错误,使我的Asynctask无法使用UI工作:Android java.lang.RuntimeException:使用jsoup执行doInBackground()时出错,android,android-asynctask,jsoup,Android,Android Asynctask,Jsoup,我是Android开发的初学者,我遇到了这样一个错误,使我的Asynctask无法使用UI工作: java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(Futu
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
我不明白为什么。我正在使用Android Studio。在构建发布之前,我的应用程序运行良好,但现在崩溃了。这是我的班级:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_my, null);
lv = (ListView) view.findViewById(R.id.listView1);
adapter = new ArrayAdapter<String>(getActivity(), R.layout.list_item, R.id.product_name, titleList);
new NewThread().execute();
return view;
}
public class NewThread extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... arg) {
Document doc;
try {
doc = Jsoup.connect("http://ot76.ru/mob/list.php?vt=" + (pageNumber + 1) + "&nl=0").get();
title = doc.select("a");
for (Element titles : title) {
titleList.add(titles.html().replace(" ", "(") + ") ");
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String str = lv.getItemAtPosition(position).toString();
Intent intent = new Intent(getActivity().getApplicationContext(), Rasp.class);
intent.putExtra("url", "http://ot76.ru/mob/getroutestr.php?vt=" + (pageNumber + 1) + "&nl=0&nmar=" + str.substring(0, str.indexOf(' ')).replace("к", "k").replace("а", "a").replace("б", "b").replace("с", "c").replace("д", "d"));
intent.putExtra("stops", lv.getItemAtPosition(position).toString().substring(str.indexOf(' '), str.length() - 1));
startActivity(intent);
}
});
}
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
pageNumber=getArguments().getInt(参数\u页码);
}
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.activity\u my,空);
lv=(ListView)view.findViewById(R.id.listView1);
adapter=newarrayadapter(getActivity(),R.layout.list_项,R.id.product_名称,标题列表);
新建NewThread().execute();
返回视图;
}
公共类NewThread扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…arg){
文件文件;
试一试{
doc=Jsoup.connect(“http://ot76.ru/mob/list.php?vt=“+(页码+1)+”&nl=0”).get();
标题=文件选择(“a”);
用于(元素标题:标题){
titleList.add(titles.html().replace(“,”(“+”));
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
低压设置适配器(适配器);
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
String str=lv.getItemAtPosition(position.toString();
Intent Intent=新的Intent(getActivity().getApplicationContext(),Rasp.class);
intent.putExtra(“url”http://ot76.ru/mob/getroutestr.php?vt=“+(页码+1)+”&nl=0&nmar=“+str.substring(0,str.indexOf(“”))。替换(“а”,“k”)。替换(“а”,“a”)。替换(“б”,“b”)。替换(“б”,“c”)。替换(“а”,“d”);
intent.putExtra(“停止”,lv.getItemAtPosition(位置).toString().substring(str.indexOf(“”),str.length()-1));
星触觉(意向);
}
});
}
}
从您的代码中,似乎您正在用null(ArrayList)填充适配器。因此,你得到了NPE
在填写标题列表后,应在onPostExecute(…)中为列表视图创建适配器对象
,否则它将为空。在onCreateView中(…)标题列表
为空
在onCreateView(…)中创建标题列表的对象
titleList = new ArrayList<String>();
编辑:
尝试创建自定义适配器
类,并尝试调试文档
不为空。从代码中可以看出,您正在用空值(ArrayList)填充适配器。因此,你得到了NPE
在填写标题列表后,应在onPostExecute(…)中为列表视图创建适配器对象
,否则它将为空。在onCreateView中(…)标题列表
为空
在onCreateView(…)中创建标题列表的对象
titleList = new ArrayList<String>();
编辑:
尝试创建自定义适配器
类并尝试调试文档
不为空。问题已解决。我只需要补充一下
-保持公共类org.jsoup.*{
公众*;
}
到我的proguard-android.txt文件。问题已解决。我只需要补充一下
-保持公共类org.jsoup.*{
公众*;
}
到我的proguard-android.txt文件。当你尝试访问它时,doc可能为空。当你尝试访问它时,doc可能为空。再次出现此错误。屏幕截图:变量名为在中是什么?不知道。我不使用此变量检查doc
在中是否为空(…)
问题已解决。需要在proguard文件中添加-keep public class org.jsoup.*{public*;}无法工作(再次出现此错误。屏幕截图:变量名为
在
中是什么?不知道。我不使用此变量检查doc
在doInBackground(…)中是否为空。
问题已解决。需要添加-keep public class org.jsoup.*{public*;}在proguard文件中你救了我的命兄弟你救了我的命兄弟
if(titleList != null) {
adapter = new ArrayAdapter<String>(getActivity(), R.layout.list_item, R.id.product_name, titleList);
lv.setAdapter(adapter);
}