Java 异步任务整数
我一直在尝试解决如何在异步任务中使用整数作为参数,以及如何分配从解析中收集的字符串值,并将其放入字符串数组以供以后调用。我到处找,找不到解决这个问题的办法Java 异步任务整数,java,android,android-asynctask,jsoup,Java,Android,Android Asynctask,Jsoup,我一直在尝试解决如何在异步任务中使用整数作为参数,以及如何分配从解析中收集的字符串值,并将其放入字符串数组以供以后调用。我到处找,找不到解决这个问题的办法 String[] webValues = new String[10]; new parsing().execute("web1", "0"); new parsing().execute("web2", "1"); public class parsing extends AsyncTask<String, Integer, Vo
String[] webValues = new String[10];
new parsing().execute("web1", "0");
new parsing().execute("web2", "1");
public class parsing extends AsyncTask<String, Integer, Void>{
String websiteValues;
@Override
protected Void doInBackground(String... params) {
try {
Document doc = Jsoup.connect(URL).get();
Element itemName = doc.getElementById(params[0]);
String htmlNoBr = itemName.html().replaceAll("<br>", "\n");
htmlNoBr = htmlNoBr.replaceAll("<b>", "");
htmlNoBr = htmlNoBr.replaceAll("</b>", "");
htmlNoBr = htmlNoBr.replaceAll("<hr>", "");
websiteValues = htmlNoBr;
}catch(Exception e){e.printStackTrace();}
return null;
}
protected void onPostExecute(Integer position) {
webValues[position.intValue()] = websiteValues;
}
}
String[]webValues=新字符串[10];
新建解析()。执行(“web1”、“0”);
新建解析()。执行(“web2”、“1”);
公共类解析扩展了异步任务{
字符串网站值;
@凌驾
受保护的Void doInBackground(字符串…参数){
试一试{
Document doc=Jsoup.connect(URL.get();
Element itemName=doc.getElementById(参数[0]);
字符串htmlNoBr=itemName.html().replaceAll(“
”,“\n”);
htmlNoBr=htmlNoBr.replaceAll(“,”);
htmlNoBr=htmlNoBr.replaceAll(“,”);
htmlNoBr=htmlNoBr.replaceAll(“
”,”);
websiteValues=htmlNoBr;
}catch(异常e){e.printStackTrace();}
返回null;
}
受保护的void onPostExecute(整数位置){
webValues[position.intValue()]=websiteValues;
}
}
我已经能够将从“web1”中收集的信息在调用时放入一个名为webValues的字符串中,而该字符串不是数组,但是我正在尝试调用一个
“new parsing().execute()”其中指定了字符串数组webValues的位置,并将信息发送到字符串数组的索引。我一直在Asynctask中使用“Integer”,并试图在onPostExecute中使用position来分配它,但它一直不起作用。我假设我犯了一个新手错误,在执行中错误地分配了整数,但是我尝试了所有我能想到的方法,只有“1”(或任何整数值)没有给我错误。如果有人能给我指出正确的方向或帮助我找出我做错了什么,我将不胜感激
如果我没有解释清楚,请让我知道,我可以尝试重新措辞
提前谢谢你 我想这会对你有所帮助
String[] webValues = new String[10];
new parsing().execute("web1", "0");
new parsing().execute("web2", "1");
public class parsing extends AsyncTask<String, Void, Integer>{
String websiteValues;
@Override
protected Integer doInBackground(String... params) {
try {
Document doc = Jsoup.connect(URL).get();
Element itemName = doc.getElementById(params[0]); //Here as per your input it first points to web1 and for next web2
String htmlNoBr = itemName.html().replaceAll("<br>", "\n");
htmlNoBr = htmlNoBr.replaceAll("<b>", "");
htmlNoBr = htmlNoBr.replaceAll("</b>", "");
htmlNoBr = htmlNoBr.replaceAll("<hr>", "");
websiteValues = htmlNoBr;
return Integer.parseInt(params[1]); //for first 0 and for second 1
}catch(Exception e){e.printStackTrace();}
return null;
}
protected void onPostExecute(Integer position) {
if (position != null)
webValues[position.intValue()] = websiteValues;
}
}
String[]webValues=新字符串[10];
新建解析()。执行(“web1”、“0”);
新建解析()。执行(“web2”、“1”);
公共类解析扩展了异步任务{
字符串网站值;
@凌驾
受保护的整数doInBackground(字符串…参数){
试一试{
Document doc=Jsoup.connect(URL.get();
Element itemName=doc.getElementById(参数[0]);//根据您的输入,它首先指向web1,然后指向下一个web2
字符串htmlNoBr=itemName.html().replaceAll(“
”,“\n”);
htmlNoBr=htmlNoBr.replaceAll(“,”);
htmlNoBr=htmlNoBr.replaceAll(“,”);
htmlNoBr=htmlNoBr.replaceAll(“
”,”);
websiteValues=htmlNoBr;
返回Integer.parseInt(参数[1]);//第一个0和第二个1
}catch(异常e){e.printStackTrace();}
返回null;
}
受保护的void onPostExecute(整数位置){
如果(位置!=null)
webValues[position.intValue()]=websiteValues;
}
}
AsyncTask原型是AsyncTask
。中间那一个是进步的,你不能指望它会有结果,是吗?因此,将结果部分指定为整数类型。我刚刚添加了您的更改,但它不起作用,给出了一个错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int java.lang.Integer.intValue()”—在公共类行,以及webValues[position.intValue()],我认为doInBackground必须有字符串而不是整数?“web1”和“web2”将是站点上的元素Id,“0”和“1”被假定为我试图传递的字符串数组“webValues”的索引,因此web1字符串数据将转到索引0,web2字符串数据转到索引1(考虑到没有0的索引,我可能想要索引1和2,而不是0和1…哎哟)在我做了一个非常小的更改后,您的答案起作用了,我想让您知道,我将“return Integer.parseInt(params[0]);”部分中的参数[0]更改为参数[1],这样就调用了第二个参数。非常感谢您的帮助,我自己是不会得到它的。