Android 获取由自定义列表适配器填充的GridView时出错

Android 获取由自定义列表适配器填充的GridView时出错,android,gridview,imageview,Android,Gridview,Imageview,我是android应用程序的新手。我正在尝试制作一个简单的应用程序,从moviedb.org获取电影数据,并在主页上显示电影海报。我正在使用GridView和ImageView与自定义适配器,但屏幕显示为空白。我不确定我需要做什么才能让图像显示出来 自定义适配器: public class CustomImageAdapter extends BaseAdapter { private Context mContext; private String[] inputs;

我是android应用程序的新手。我正在尝试制作一个简单的应用程序,从moviedb.org获取电影数据,并在主页上显示电影海报。我正在使用GridView和ImageView与自定义适配器,但屏幕显示为空白。我不确定我需要做什么才能让图像显示出来

自定义适配器:

public class CustomImageAdapter extends BaseAdapter {
    private Context mContext;
    private String[] inputs;
    private List<ImageView> imageList;
    LayoutInflater inflater;

    public CustomImageAdapter(Context c, String[] inputs) {
        mContext = c;
        this.inputs = inputs;
        inflater = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return inputs.length;
    }

    public Object getItem(int position) {
        return imageList.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public void add(String[] results) {
        inputs = results;
        imageList = new ArrayList<ImageView>();

        for (int i = 0; i < inputs.length; i++){
            ImageView imageView = new ImageView(mContext);
            Picasso.with(mContext)
                    .load(inputs[i])
                    .into(imageView);
            imageList.add(imageView);
        }
    }


    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View gridView;

        if (convertView == null) {
            gridView = new View(mContext);
            convertView = inflater.inflate(R.layout.grid_layout, null);
            ImageView imageView = (ImageView) gridView.findViewById(R.id.grid_layout_image_view);
            imageView = imageList.get(position);
        } else {
            gridView = (View) convertView;
        }
        return gridView;
    }
}
公共类CustomImageAdapter扩展了BaseAdapter{
私有上下文;
私有字符串[]输入;
私人名单;
充气机;
公共CustomImageAdapter(上下文c,字符串[]输入){
mContext=c;
这个输入=输入;
充气器=(LayoutFlater)this.mContext.getSystemService(Context.LAYOUT\u充气器\u服务);
}
public int getCount(){
返回输入。长度;
}
公共对象getItem(int位置){
返回imageList.get(位置);
}
公共长getItemId(int位置){
返回位置;
}
公共void添加(字符串[]结果){
输入=结果;
imageList=新的ArrayList();
对于(int i=0;i
主要片段:

public class GridFragment extends Fragment {


private static ImageView imageView;
private static String[] jsonStringHolder = new String[1];
private static CustomImageAdapter customImageAdapter;
private static GridView gridView;

public GridFragment() {
}

@Override
public void onStart() {
    super.onStart();
    FetchMovieTask fetchMovieTask = new FetchMovieTask();
    fetchMovieTask.execute();
}

private void loadImageView(String[] result) {
    try {
        getMovieDataFromJson(result);
    } catch (JSONException e) {
        Log.e("LOG_TAG", e.getMessage(), e);
        e.printStackTrace();
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_main, container, false);
    //customImageAdapter = new CustomImageAdapter(getContext(), null);
    gridView = (GridView) rootView.findViewById(R.id.grid_view);
    //gridView.setAdapter(customImageAdapter);
    return rootView;
}

private void getMovieDataFromJson(String[] jsonStringHolder)
        throws JSONException {

    final String OWM_POSTER_PATH = "poster_path";
    final String OWM_RESULTS = "results";
    String movieJsonStr = jsonStringHolder[0];
    JSONObject movieJsonObject = new JSONObject(movieJsonStr);
    JSONArray movieJsonArray = movieJsonObject.getJSONArray(OWM_RESULTS);

    String[] resultStrs = new String[movieJsonArray.length()];
    for (int i = 0; i < movieJsonArray.length(); i++) {
        JSONObject movieDescriptionJsonObject = movieJsonArray.getJSONObject(i);
        String posterPathPlaceholder =
                movieDescriptionJsonObject.getString(OWM_POSTER_PATH);

        final String FORECAST_BASE_URL =
                "http://api.themoviedb.org/3/movie/";
        final String SIZE = "w185";
        resultStrs[i] = FORECAST_BASE_URL + SIZE + posterPathPlaceholder;
    }
    customImageAdapter = new CustomImageAdapter(getContext(), null);
    customImageAdapter.add(resultStrs);
    gridView.setAdapter(customImageAdapter);
}

public class FetchMovieTask extends AsyncTask<Void, Void, String[]> {

    private final String LOG_TAG = FetchMovieTask.class.getSimpleName();

    @Override
    protected String[] doInBackground(Void... params) {

        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 {
            // Construct the URL for the OpenWeatherMap query
            // Possible parameters are avaiable at OWM's forecast API page, at
            // http://openweathermap.org/API#forecast
            final String FORECAST_BASE_URL =
                    "http://api.themoviedb.org/3/movie/";
            final String PREFERENCE = "now_playing?";
            final String API_KEY = "api_key=e0cbb327025cf835dfc53ca51d11db68";
            //final String UNITS_PARAM = "units";
            //final String DAYS_PARAM = "cnt";

            String urlString = FORECAST_BASE_URL + PREFERENCE + API_KEY;
            URL url = new URL(urlString);


            // Create the request to OpenWeatherMap, and open the connection
            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();

        } catch (IOException e) {
            Log.e(LOG_TAG, "Error pits", e);
            // If the code didn't successfully get the weather 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(LOG_TAG, "Error closing stream", e);
                }
            }
        }
        String[] movieJsonStrArray = new String[1];
        movieJsonStrArray[0] = movieJsonStr;
        return movieJsonStrArray;
    }

    @Override
    protected void onPostExecute(String[] result) {
        if (result != null) {
            jsonStringHolder[0] = result[0];
        }
        loadImageView(result);
    }
}
公共类GridFragment扩展片段{
私有静态图像视图;
私有静态字符串[]jsonStringHolder=新字符串[1];
私有静态CustomImageAdapter CustomImageAdapter;
私有静态GridView GridView;
公共网格片段(){
}
@凌驾
public void onStart(){
super.onStart();
FetchMovieTask FetchMovieTask=新建FetchMovieTask();
fetchMovieTask.execute();
}
私有void loadImageView(字符串[]结果){
试一试{
getMovieDataFromJson(结果);
}捕获(JSONException e){
Log.e(“Log_标记”,e.getMessage(),e);
e、 printStackTrace();
}
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment_main,容器,错误);
//customImageAdapter=新的customImageAdapter(getContext(),null);
gridView=(gridView)rootView.findViewById(R.id.grid\u视图);
//setAdapter(customImageAdapter);
返回rootView;
}
私有void getMovieDataFromJson(字符串[]jsonStringHolder)
抛出JSONException{
最终字符串OWM_POSTER_PATH=“POSTER_PATH”;
最终字符串OWM_RESULTS=“RESULTS”;
字符串movieJsonStr=jsonStringHolder[0];
JSONObject movieJsonObject=新的JSONObject(movieJsonStr);
JSONArray movieJsonArray=movieJsonObject.getJSONArray(OWM_结果);
String[]resultStrs=新字符串[movieJsonArray.length()];
for(int i=0;i<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivityFragment">
    <GridView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/grid_view"
        android:layout_alignParentBottom="true"
        android:layout_centerInParent="true">
    </GridView>
    <ImageView xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/grid_layout_image_view" />
</RelativeLayout>