arraybounds exception&构造函数值在AsyncTask中对doInBackground不可见

时间:2015-09-07 12:32:45

标签: android android-asynctask httpurlconnection

执行后台任务时,我得到“java.lang.ArrayIndexOutOfBoundsException:length = 0; index = 0”。请帮忙。

 ArrayList<String> ilist ,rlist,glist,yearlist;
 public static final String FetchURL = "http://fxxxx.fxxx.com/fetchdesc.php";

 new fetchDescInBack(ilist,rlist,glist,yearlist).execute();


private class fetchDescInBack extends AsyncTask<ArrayList,String,String>
{
    private final ArrayList<String> ilist,rlist,glist,yearlist;
    URL url;

    Context context;


    public fetchDescInBack(ArrayList<String> ilist, ArrayList<String> rlist, ArrayList<String> glist, ArrayList<String> yearlist) {
        this.ilist = ilist;
        this.rlist = rlist;
        this.glist = glist;
        this.yearlist = yearlist;
        this.context=context;
        Log.e("Shiva", "" + ilist);
    }


    @Override
    protected String doInBackground(ArrayList... params) {
       ArrayList ilist = params[0];
       ArrayList rlist = params[1];
       ArrayList glist = params[2];
       ArrayList yearlist = params[3];
       try {
           url = new URL(FetchURL);
           HttpURLConnection connection = (HttpURLConnection) url.openConnection();

           InputStream inputStream = connection.getInputStream();
           InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
           BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

           StringBuilder stringBuilder = new StringBuilder();
           String tempstring;

           while ((tempstring = bufferedReader.readLine()) != null) {
               stringBuilder.append(tempstring);
               stringBuilder.append("\n");
           }

       } catch (MalformedURLException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       }


       return null;
    }

我在另一个活动中将4个值列表传递给Asynctask下的这个类。所以我使用了构造函数并将值传递给Asynctask。但是有一个异常,构造函数中赋值的值无法在doInBackground任务中获取。请帮忙。

1 个答案:

答案 0 :(得分:0)

例外是正确的。 ArrayList... paramsdoInBackground的前一个参数,是指您向构造函数传递给execute() no的参数。

new fetchDescInBack(ilist,rlist,glist,yearlist).execute(ilist,rlist,glist,yearlist);

应该修复它。为避免混淆,您应选择或使用constructor传递值或使用params