Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Asynctask并将arraylist传递给它,从而导致错误_Java_Android_Android Asynctask_Nullpointerexception - Fatal编程技术网

Java Asynctask并将arraylist传递给它,从而导致错误

Java Asynctask并将arraylist传递给它,从而导致错误,java,android,android-asynctask,nullpointerexception,Java,Android,Android Asynctask,Nullpointerexception,我有一个简单的程序,可以从GoogleImagesAPI获取JSON数据。它将JSON中的所有URL存储在ArrayList中。我创建了一个异步任务来处理这个问题。当我运行该程序时,出现以下错误: java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:299)

我有一个简单的程序,可以从GoogleImagesAPI获取JSON数据。它将JSON中的所有URL存储在ArrayList中。我创建了一个异步任务来处理这个问题。当我运行该程序时,出现以下错误:

java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:299)
            at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
            at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
            at java.util.concurrent.FutureTask.run(FutureTask.java:137)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
            at java.lang.Thread.run(Thread.java:856)
     Caused by: java.lang.NullPointerException
            at com.example.bab.googleimagesapi.MainActivity$myTask.doInBackground(MainActivity.java:84)
            at com.example.bab.googleimagesapi.MainActivity$myTask.doInBackground(MainActivity.java:58)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
            at java.util.concurrent.FutureTask.run(FutureTask.java:137)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
            at java.lang.Thread.run(Thread.java:856)
它说在第58行和第84行有一个
NullPointerException
。 这是我的Asynctask代码,我对第58行和第84行进行了注释,以便您可以找到它们

    private class myTask extends AsyncTask<Void, Void, ArrayList<String> > {  **//LINE 58**

        @Override
        protected ArrayList<String> doInBackground(Void... params) {
            String imageUrl = "x";
            String query = editText.getText().toString();            //get users search query
            query = query.replaceAll(" ", "%20");
            try {
                URL url = new URL("https://ajax.googleapis.com/ajax/services/search/imagesv=1.0&q=" + query + "&userip=INSERT-USER-IP");
                URLConnection connection = url.openConnection();
                connection.addRequestProperty("referer", "www.github.com");
                String line;
                StringBuilder builder = new StringBuilder();

                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }

                try {
                    JSONObject jsonObject = new JSONObject(builder.toString());
                    JSONObject sub = jsonObject.getJSONObject("responseData");
                    JSONArray results = sub.getJSONArray("results");
                    for(int x = 0; x < results.length(); x++) {
                        JSONObject jsonImage = results.getJSONObject(x);
                        imageUrl = jsonImage.getString("url");
                        urlList.add(imageUrl);        **//LINE 84**
                    }
                    return urlList;
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            } catch (MalformedURLException e) {
                e.printStackTrace();
                // textResult = e.toString();
            } catch (IOException e) {
                e.printStackTrace();
                //textResult = e.toString();
            }
            return null;
        }


        protected void onPostExecute(ArrayList<String> list) {

            for(int x = 0; x < list.size(); x++){
                textView.append(list.get(x));
            }
        }
    }
私有类myTask扩展了AsyncTask{**//第58行**
@凌驾
受保护的ArrayList doInBackground(无效…参数){
字符串imageUrl=“x”;
String query=editText.getText().toString();//获取用户搜索查询
query=query.replaceAll(“,“%20”);
试一试{
URL=新URL(“https://ajax.googleapis.com/ajax/services/search/imagesv=1.0&q=“+query+”&userip=INSERT-USER-IP”);
URLConnection=url.openConnection();
addRequestProperty(“referer”,“www.github.com”);
弦线;
StringBuilder=新的StringBuilder();
BufferedReader=new BufferedReader(new InputStreamReader(connection.getInputStream());
而((line=reader.readLine())!=null){
builder.append(行);
}
试一试{
JSONObject JSONObject=新的JSONObject(builder.toString());
JSONObject sub=JSONObject.getJSONObject(“responseData”);
JSONArray results=sub.getJSONArray(“结果”);
对于(int x=0;x

一般来说,我对使用AsyncTask和Android还不熟悉,所以我非常感谢您的帮助

在使用它之前,您需要初始化
urlist

urlList = new ArrayList<>();
urlist=newarraylist();

在使用它之前,您需要初始化
urlist

urlList = new ArrayList<>();
urlist=newarraylist();

在使用它之前,您需要初始化
urlist

urlList = new ArrayList<>();
urlist=newarraylist();

在使用它之前,您需要初始化
urlist

urlList = new ArrayList<>();
urlist=newarraylist();

您需要在
myTask

urlList = new ArrayList<>();
urlist=newarraylist();
或者宣布它是最终的

另外,我不建议您在Android上使用
AsyncTask
。请在此处阅读更多信息:

您需要在
myTask

urlList = new ArrayList<>();
urlist=newarraylist();
或者宣布它是最终的

另外,我不建议您在Android上使用
AsyncTask
。请在此处阅读更多信息:

您需要在
myTask

urlList = new ArrayList<>();
urlist=newarraylist();
或者宣布它是最终的

另外,我不建议您在Android上使用
AsyncTask
。请在此处阅读更多信息:

您需要在
myTask

urlList = new ArrayList<>();
urlist=newarraylist();
或者宣布它是最终的

另外,我不建议您在Android上使用
AsyncTask
。请在此处阅读更多信息:

您在哪里初始化
urlist
?另外,使用
URLConnection
也没有什么问题,但我发现使用Android(Apache)的HttpClient更好。更多信息请访问:您在哪里初始化
urlist
?另外,使用
URLConnection
也没有什么问题,但我发现使用Android(Apache)的HttpClient更好。更多信息请访问:您在哪里初始化
urlist
?另外,使用
URLConnection
也没有什么问题,但我发现使用Android(Apache)的HttpClient更好。更多信息请访问:您在哪里初始化
urlist
?另外,使用
URLConnection
也没有什么问题,但我发现使用Android(Apache)的HttpClient更好。更多信息:我在MainActivity类中意外声明并初始化了它。非常感谢。。!我在MainActivity类中意外声明并初始化了它。非常感谢。。!我在MainActivity类中意外声明并初始化了它。非常感谢。。!我在MainActivity类中意外声明并初始化了它。非常感谢。。!