java结构,并将两个数组发送到同一个接收函数
早上好
我试图将两个数组(分别从getValuesGraph(doc)和getValuesFooter(doc)返回)发送到同一个函数(OnPostExecute),我是Java和Android的新手,现在不知道应用程序代码结构是否正确。所以我为这场“灾难”道歉。 LogCat说:
02-21 00:07:25.852:W/dalvikvm(3282):threadid=1:线程退出,但出现未捕获异常(组=0x40a71930) 02-21 00:07:25.862:E/AndroidRuntime(3282):致命异常:main 02-21 00:07:25.862:E/AndroidRuntime(3282):java。lang.NullPointerException 02-21 00:07:25.862:E/AndroidRuntime(3282):在com。实例Khora1。main活动$BackGroundTask。onPostExecute(MainActivity.java:159) 02-21 00:07:25.862:E/AndroidRuntime(3282):在com。实例Khora1。main活动$BackGroundTask。onPostExecute(MainActivity.java:1) 02-21 00:07:25.862:E/AndroidRuntime(3282):在安卓上。操作系统。异步任务。完成(AsyncTask.java:631) 02-21 00:07:25.862:E/AndroidRuntime(3282):在安卓上。操作系统。异步任务。access$600(AsyncTask.java:177) 02-21 00:07:25.862:E/AndroidRuntime(3282):在安卓上。操作系统。AsyncTask$InternalHandler。handleMessage(AsyncTask.java:644) 02-21 00:07:25.862:E/AndroidRuntime(3282):在安卓上。操作系统。汉德勒。dispatchMessage(Handler.java:99) 02-21 00:07:25.862:E/AndroidRuntime(3282):在安卓上。操作系统。活套。loop(Looper.java:137) 02-21 00:07:25.862:E/AndroidRuntime(3282):在安卓上。应用程序。活动线程。main(ActivityThread.java:5041) 02-21 00:07:25.862:E/AndroidRuntime(3282):在爪哇。朗,反思一下。方法invokenactive(本机方法) 02-21 00:07:25.862:E/AndroidRuntime(3282):在爪哇。朗,反思一下。方法调用(Method.java:511) 02-21 00:07:25.862:E/AndroidRuntime(3282):在com。安卓内部的操作系统。ZygoteInit$MethodandArgscaler。run(ZygoteInit.java:793) 02-21 00:07:25.862:E/AndroidRuntime(3282):在com。安卓内部的操作系统。合子体。main(ZygoteInit.java:560) 02-21 00:07:25.862:E/AndroidRuntime(3282):在达尔维克。系统本土艺术。主(本机方法)
以下是代码:
package com.example.kwhora1;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import 安卓.app.Activity;
import 安卓.os.AsyncTask;
import 安卓.os.Bundle;
import 安卓.view.Menu;
import 安卓.widget.TextView;
public class MainActivity extends Activity {
private TextView tvmax, tvmid, tvmin, tvactualval;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvmax=(TextView)findViewById(R.id.tvmaximo);
tvmid=(TextView)findViewById(R.id.tvmedio);
tvmin=(TextView)findViewById(R.id.tvminimo);
new BackGroundTask().execute();
}
@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 BackGroundTask extends AsyncTask<Void, Void, String[]> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
public String[] getValuesGraph(Document doc) {
int cont=24,var=7;
String bar[] = new String[cont];
/*
* Getting elements from the graphic in an array from 0-23. 0 it's 1:00am, 23 it's 00:00am
*/
for (cont=0; cont < 24; cont++){
String onMouseOver = doc.select("a").get(var+cont).attr("onMouseOver");
bar[cont] = onMouseOver.split("'")[9];
}
return bar;
}
public String[] getValuesFooter(Document doc) {
String values[] = new String[7];
/*
* Getting elements from the graphic footer
*/
Elements elements = doc.select("td.cabeceraRutaTexto");
elements.size(); // 6
/* Getting text from table */
values[0] = elements.get(0).text(); // TITLE
values[1] = elements.get(1).text(); // TEXT MAX VALUE
values[2] = elements.get(2).text(); // TEXT MIDDLE VALUE
values[3] = elements.get(3).text(); // TEXTO MIN VALUE
/* Getting numbers from table */
values[4] = elements.get(4).text(); // NUMBER MAX VALUE
values[5] = elements.get(5).text(); // NUMBER MIDDLE VALUE
values[6] = elements.get(6).text(); // NUMBER MIN VALUE
return values;
}
@Override
public String[] doInBackground(Void... params) {
try {
URL url= new URL("http://www.mywebtoextractdata.com");
Document doc = Jsoup.connect(url.toString()).get();
getValuesGraph(doc);
getValuesFooter(doc);
/*
* Getting elements from the graphic in an array from 0-23. 0 it's 1:00am, 23 it's 00:00am
*/
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String[] values) {
/*tvactualval.setText();*/
tvmax.setText(values[4]);
tvmid.setText(values[5]);
tvmin.setText(values[6]);
/*System.out.println(val[4]);*/
super.onPostExecute(values);
}
}
}
提前感谢您的帮助和时间
# 1 楼答案
在
String[] doInBackground(Void... params) {
中,应该返回一个字符串数组。所以创造一个然后将
getValuesGraph()
的结果添加到其中然后
return
然后