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):致命异常:主 02-21 00:07:25.862:E/AndroidRuntime(3282):java.lang.NullPointerException 02-21 00:07:25.862:E/AndroidRuntime(3282):位于com.example.kwhora1.MainActivity$BackGroundTask.onPostExecute(MainActivity.java:159) 02-21 00:07:25.862:E/AndroidRuntime(3282):位于com.example.kwhora1.MainActivity$BackGroundTask.onPostExecute(MainActivity.java:1) 02-21 00:07:25.862:E/AndroidRuntime(3282):在android.os.AsyncTask.finish(AsyncTask.java:631) 02-21 00:07:25.862:E/AndroidRuntime(3282):在android.os.AsyncTask.access$600(AsyncTask.java:177) 02-21 00:07:25.862:E/AndroidRuntime(3282):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 02-21 00:07:25.862:E/AndroidRuntime(3282):在android.os.Handler.dispatchMessage(Handler.java:99)上 02-21 00:07:25.862:E/AndroidRuntime(3282):在android.os.Looper.loop(Looper.java:137)上 02-21 00:07:25.862:E/AndroidRuntime(3282):位于android.app.ActivityThread.main(ActivityThread.java:5041) 02-21 00:07:25.862:E/AndroidRuntime(3282):位于java.lang.reflect.Method.Invokenactive(本机方法) 02-21 00:07:25.862:E/AndroidRuntime(3282):位于java.lang.reflect.Method.invoke(Method.java:511) 02-21 00:07:25.862:E/AndroidRuntime(3282):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 02-21 00:07:25.862:E/AndroidRuntime(3282):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 02-21 00:07:25.862:E/AndroidRuntime(3282):在dalvik.system.NativeStart.main(本机方法) 代码如下:Java 结构,并将两个阵列发送到同一接收函数,java,android,arrays,eclipse,jsoup,Java,Android,Arrays,Eclipse,Jsoup,早上好 我尝试将两个数组(分别从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(
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 android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.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);
}
}
}
package com.example.1;
导入java.io.IOException;
导入java.net.URL;
导入java.util.array;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
导入org.jsoup.select.Elements;
导入android.app.Activity;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.Menu;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
私有文本视图tvmax、tvmid、tvmin、tvactualval;
@凌驾
创建时受保护的void(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.tvmimo);
新建BackGroundTask().execute();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
类BackGroundTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
公共字符串[]getValuesGraph(文档文档){
int cont=24,var=7;
字符串栏[]=新字符串[cont];
/*
*从0-23的数组中获取图形元素。0是1:00am,23是00:00am
*/
对于(cont=0;cont<24;cont++){
字符串onMouseOver=doc.select(“a”).get(var+cont.attr(“onMouseOver”);
条[cont]=onMouseOver.split(“”)[9];
}
返回杆;
}
公共字符串[]getValuesFooter(文档文档){
字符串值[]=新字符串[7];
/*
*从图形页脚获取元素
*/
Elements=doc.select(“td.cabeceraRutaTexto”);
elements.size();//6
/*从表中获取文本*/
值[0]=elements.get(0.text();//标题
值[1]=elements.get(1.text();//文本最大值
值[2]=elements.get(2.text();//文本中间值
值[3]=elements.get(3.text();//TEXTO最小值
/*从表中获取数字*/
values[4]=elements.get(4).text();//数字最大值
values[5]=elements.get(5).text();//数字中间值
values[6]=elements.get(6.text();//NUMBER最小值
返回值;
}
@凌驾
公共字符串[]doInBackground(Void…params){
试一试{
URL=新URL(“http://www.mywebtoextractdata.com");
Document doc=Jsoup.connect(url.toString()).get();
getValuesGraph(文档);
getValuesFooter(文档);
/*
*从0-23的数组中获取图形元素。0是1:00am,23是00:00am
*/
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串[]值){
/*tvactualval.setText()*/
tvmax.setText(值[4]);
tvmid.setText(值[5]);
tvmin.setText(值[6]);
/*System.out.println(val[4])*/
super.onPostExecute(值);
}
}
}
提前感谢您的帮助和时间。在
String[]doInBackground(Void…params){
中,您应该返回一个字符串数组。因此创建一个字符串数组
String arr [] = new String [2];
然后将getValuesGraph()
的结果添加到其中
arr[0] = getValuesGraph(doc);
arr[1] = getValuesFooter(doc);
然后
return
then arr非常感谢您的帮助。这是最好的方法吗?现在编译器说“不能从字符串转换”[