渲染错误 - 渲染期间引发异常:AdapterView中不支持addView

时间:2016-05-24 01:06:51

标签: android

每次尝试查看xml文件时都会出现渲染错误。这是我看到的渲染错误: 渲染期间引发异常:AdapterView(详细信息)

不支持addView(View,LayoutParams)

任何人都可以帮助我吗?非常感谢。谢谢。

private MovieDbAdapter movieAdapter;

MoviePoster[] moviePosters = {
        new MoviePoster("String", "String", R.drawable.ic_launcher),


};

public MainActivityFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Add this line in order for this fragment to handle menu events.
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_main, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.refresh) {
        FetchMovieInfo movieTask = new FetchMovieInfo();
                    movieTask.execute("94043");
        return true;
    }
    return super.onOptionsItemSelected(item);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);
    movieAdapter = new MovieDbAdapter(getActivity(), Arrays.asList(moviePosters));

    GridView gridView = (GridView) rootView.findViewById(R.id.movies_grid);
    gridView.setAdapter(movieAdapter);

    return rootView;
}

public class FetchMovieInfo extends AsyncTask<String, Void, String[]> {
    private final String LOG_TAG = FetchMovieInfo.class.getSimpleName();

                    private String getReadableDateString(long time){
                    // Because the API returns a unix timestamp (measured in seconds),
                            // it must be converted to milliseconds in order to be converted to valid date.
                                    SimpleDateFormat shortenedDateFormat = new SimpleDateFormat("EEE MMM dd");
                    return shortenedDateFormat.format(time);
                }

                    /**
     +         * Prepare the weather high/lows for presentation.
     +         */
                    private String formatHighLows(double high, double low) {
                    // For presentation, assume the user doesn't care about tenths of a degree.
                            long roundedHigh = Math.round(high);
                    long roundedLow = Math.round(low);

                            String highLowStr = roundedHigh + "/" + roundedLow;
                    return highLowStr;
                }

                    /**
     +         * Take the String representing the complete movie in JSON Format and
     +         * pull out the data we need to construct the Strings needed for the wireframes.
     +         *
     +         * Fortunately parsing is easy:  constructor takes the JSON string and converts it
     +         * into an Object hierarchy for us.
     +         */
                    private String[] getMovieDataFromJson(String movieJsonStr, int numDays)
                    throws JSONException {

                            // These are the names of the JSON objects that need to be extracted.
                                    final String OWM_LIST = "list";
                    final String OWM_WEATHER = "weather";
                    final String OWM_TEMPERATURE = "temp";
                    final String OWM_MAX = "max";
         final String OWM_MIN = "min";
                    final String OWM_DESCRIPTION = "main";

                            JSONObject movieJson = new JSONObject(movieJsonStr);
                   JSONArray movieArray = movieJson.getJSONArray(OWM_LIST);

                            // OWM returns daily forecasts based upon the local time of the city that is being
                                    // asked for, which means that we need to know the GMT offset to translate this data
                                            // properly.

                                                            // Since this data is also sent in-order and the first day is always the
                                                                    // current day, we're going to take advantage of that to get a nice
                                                                            // normalized UTC date for all of our weather.

                                                                                            Time dayTime = new Time();
                    dayTime.setToNow();

                            // we start at the day returned by local time. Otherwise this is a mess.
                                    int julianStartDay = Time.getJulianDay(System.currentTimeMillis(), dayTime.gmtoff);

                            // now we work exclusively in UTC
                                    dayTime = new Time();

                            String[] resultStrs = new String[numDays];
                    for(int i = 0; i < movieArray.length(); i++) {
                            // For now, using the format "Day, description, hi/low"
                                    String day;
                            String description;
                            String highAndLow;

                                    // Get the JSON object representing the day
                                            JSONObject dayMovie = movieArray.getJSONObject(i);

                                    // The date/time is returned as a long.  We need to convert that
                                            // into something human-readable, since most people won't read "1400356800" as
                                                    // "this saturday".
                                                            long dateTime;
                            // Cheating to convert this to UTC time, which is what we want anyhow
                                    dateTime = dayTime.setJulianDay(julianStartDay + i);
                            day = getReadableDateString(dateTime);

                                    // description is in a child array called "weather", which is 1 element long.
                                            JSONObject movieObject = dayMovie.getJSONArray(OWM_WEATHER).getJSONObject(0);
                            description = movieObject.getString(OWM_DESCRIPTION);

                                    // Temperatures are in a child object called "temp".  Try not to name variables
                                            // "temp" when working with temperature.  It confuses everybody.
                                                    JSONObject temperatureObject = dayMovie.getJSONObject(OWM_TEMPERATURE);
                            double high = temperatureObject.getDouble(OWM_MAX);
                            double low = temperatureObject.getDouble(OWM_MIN);

                                    highAndLow = formatHighLows(high, low);
                            resultStrs[i] = day + " - " + description + " - " + highAndLow;
                        }

                            for (String s : resultStrs) {
                            Log.v(LOG_TAG, "Movie Entry: " + s);
                        }
                    return resultStrs;

                        }

    @Override
    protected String[] doInBackground(String... params) {
        // These two need to be declared outside the try/catch
        // so that they can be closed in the finally block.
        if (params.length == 0) {
                            return null;
                        }
        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;

        // Will contain the raw JSON response as a string.
        String movieJsonStr = null;
        String format = "json";
                    String units = "metric";
                    int numDays = 7;

        try {
            // adjust code for movie database api
            // building URL https://api.themoviedb.org/3/movie/550?api_key=5622cafbfe8f8cfe358a29c53e19bba0/discover/movie?sort_by=popularity.desc
            final String MOVIE_BASE_URL =
                                            "https://api.themoviedb.org/3/movie/550?";

                                    Uri builtUri = Uri.parse(MOVIE_BASE_URL).buildUpon()
                                            .appendPath("3")
                                            .appendPath("movie")
                                            .appendPath("550")
                                            .appendQueryParameter("api_key", "5622cafbfe8f8cfe358a29c53e19bba0")
                                            .appendPath("discover")
                                            .appendPath("movie")
                                            .appendQueryParameter("sort_by", "popularity.desc")
                                            .build();

                                    URL url = new URL(builtUri.toString());

                                    Log.v(LOG_TAG, "Built URI " + builtUri.toString());
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();

            // Read the input stream into a String
            InputStream inputStream = urlConnection.getInputStream();
            StringBuffer buffer = new StringBuffer();
            if (inputStream == null) {
                // Nothing to do.
                return null;
            }
            reader = new BufferedReader(new InputStreamReader(inputStream));

            String line;
            while ((line = reader.readLine()) != null) {
                // Since it's JSON, adding a newline isn't necessary (it won't affect parsing)
                // But it does make debugging a *lot* easier if you print out the completed
                // buffer for debugging.
                buffer.append(line + "\n");
            }

            if (buffer.length() == 0) {
                // Stream was empty.  No point in parsing.
                return null;
            }
            movieJsonStr = buffer.toString();

                                    Log.v(LOG_TAG, "Movie string: " + movieJsonStr);
        } catch (IOException e) {
            Log.e("PlaceholderFragment", "Error ", e);
            // If the code didn't successfully get the movie data, there's no point in attemping
            // to parse it.
            return null;
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (final IOException e) {
                    Log.e("PlaceholderFragment", "Error closing stream", e);
                }
            }
        }
                       //TODO Uncomment your goddamn block of code once it's been figured out
                          /*try {
                           return geMovieDataFromJson(movieJsonStr, numDays);
                          } catch (JSONException e) {
                           Log.e(LOG_TAG, e.getMessage(), e);
                            e.printStackTrace();
                        }

                            // This will only happen if there was an error getting or parsing the code.
                            */
        return null;
    }

                    @Override
            protected void onPostExecute(String[] result) {
                    if (result != null) {
                            movieAdapter.clear();
                            for(String vName : result) {
                                   // movieAdapter.add(vName);
                                }
                            // New data is back from the server.  Hooray!
                                }
                }
} }

0 个答案:

没有答案