Android 即使对于一个小的JSON响应,也会出现内存不足错误

Android 即使对于一个小的JSON响应,也会出现内存不足错误,android,json,performance,out-of-memory,Android,Json,Performance,Out Of Memory,下面是从URL获取JSON响应的代码。我使用AsyncTask下载响应。从logcat输出中,错误显示在readFromStream方法中 private class MovieAsyncTask extends AsyncTask<String, Void, List<Movie>>{ @Override protected List<Movie> doInBackground(String... urls) { UR

下面是从URL获取JSON响应的代码。我使用AsyncTask下载响应。从logcat输出中,错误显示在readFromStream方法中

    private class MovieAsyncTask extends AsyncTask<String, Void, List<Movie>>{
    @Override
    protected List<Movie> doInBackground(String... urls) {
        URL url = createUrl(urls[0]);

        String jsonresponse = "";

        try{
            jsonresponse = makeHttpRequest(url);
        }
        catch (IOException e){

        }


        List<Movie> movieList = extractMovieFromJson(jsonresponse);

        return movieList;

    }

    @Override
    protected void onPostExecute(List<Movie> movieList) {
        MovieAdapter adapter = new MovieAdapter(movieList);
        recyclerView.setAdapter(adapter);

    }

    private URL createUrl(String stringUrl) {
        URL url = null;

        try {
            url = new URL(stringUrl);
        } catch (MalformedURLException e) {
            return null;
        }

        return url;

    }

    private String makeHttpRequest(URL url) throws IOException{
        String jsonresponse = null;
        HttpURLConnection urlConnection = null;
        InputStream inputStream = null;
        try {
            urlConnection = (HttpURLConnection) url.openConnection();

            urlConnection.setRequestMethod("GET");
            urlConnection.setReadTimeout(10000);
            urlConnection.setConnectTimeout(15000);
            urlConnection.connect();

            inputStream = urlConnection.getInputStream();
            jsonresponse = readFromStream(inputStream);
        }
        catch (IOException e){

        }
        finally {
            if(urlConnection != null)
                urlConnection.disconnect();
            if (inputStream != null)
                inputStream.close();
        }

        return jsonresponse;

    }

    private String readFromStream(InputStream inputStream) throws IOException {
        StringBuilder output = new StringBuilder();
        if(inputStream != null){
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream , Charset.forName("UTF-8"));
            BufferedReader reader = new BufferedReader(inputStreamReader);
            String line = reader.readLine();
            while (line != null){
                output.append(line);
                reader.readLine();
            }
        }
        Log.v("response",output.toString());
        return  output.toString();
    }


    private List<Movie> extractMovieFromJson(String movieJson){

        List<Movie> movieList = new ArrayList<>();
        if (TextUtils.isEmpty(movieJson))
            return  null;

        try{
            JSONObject basejsonresponse = new JSONObject(movieJson);
            JSONObject data = basejsonresponse.getJSONObject("data");

            JSONArray movieArray = data.getJSONArray("movies");

            for (int i = 0; i < movieArray.length(); i++) {

                JSONObject movie = movieArray.getJSONObject(i);
                String movieName = movie.getString("title_long");
                String movieUrl = movie.getString("url");
                String movieImg = movie.getString("background_image_original");

                movieList.add(new Movie(movieName,movieUrl,movieImg));


            }
            return movieList;
        }
        catch (JSONException e){

        }
        return null;
    }
}
}

我不明白为什么会这样。我看到一些帖子提到使用GSON。但我认为这不是一个很大的回应。请帮帮我。

你有无限循环,因为你从不更新你的行变量。试试这个:

while (line != null) {
    output.append(line);
    line = reader.readLine();
}
while (line != null) {
    output.append(line);
    line = reader.readLine();
}