有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    String[] doInBackground(Void... params) {中,应该返回一个字符串数组。所以创造一个

     String arr [] = new String [2];
    

    然后将getValuesGraph()的结果添加到其中

    arr[0] = getValuesGraph(doc);
    arr[1] = getValuesFooter(doc);
    

    然后return然后