Android 当我点击刷新按钮时,图像永远不会出现

Android 当我点击刷新按钮时,图像永远不会出现,android,Android,我一直在努力解决这个问题,当我在我的应用程序中点击刷新按钮时,图像不会加载到屏幕上 这是数据片段文件,当我构建这个应用程序时没有错误 package com.example.popularmovis; import android.app.Fragment; import android.content.SharedPreferences; import android.net.Uri; import android.os.AsyncTask; impo

我一直在努力解决这个问题,当我在我的应用程序中点击刷新按钮时,图像不会加载到屏幕上

这是数据片段文件,当我构建这个应用程序时没有错误

package com.example.popularmovis;

    import android.app.Fragment;
    import android.content.SharedPreferences;
    import android.net.Uri;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.preference.PreferenceManager;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.GridView;
    import android.os.AsyncTask;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.jar.JarException;

    /**
     * A placeholder fragment containing a simple view.
     */
    public class DataFragment extends Fragment {

        public ImageAdapter display;

        public DataFragment() {
        }

        @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.datafragment_menu, 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();

            //noinspection SimplifiableIfStatement
            if (id == R.id.action_refresh) {
                FetchMovieData movieData = new FetchMovieData();
                movieData.execute();

                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);
            display = new ImageAdapter(rootView.getContext());
            GridView gridView = (GridView) rootView.findViewById(R.id.gridView_movies);
            gridView.setAdapter(display); // uses the view to get the context instead of getActivity().
            return rootView;

        }

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

            private String[] extractdisplayFromJason(String jasnData)
                                                throws JSONException{
                //These jason display need to be extracted
                final String movie_results = "results";
                final String movie_poster = "poster_path";

                JSONObject movieData = new JSONObject(jasnData);
                JSONArray movieArray = movieData.getJSONArray(movie_results);
                String[] posterAddreess = new String[movieArray.length()];

                //Fill ther posterAddreess with the URL to display
                for(int j=0; j < movieArray.length(); j++){

                    String posterPath;
                    JSONObject movieArrayItem = movieArray.getJSONObject(j);
                    posterPath = movieArrayItem.getString(movie_poster);
                    posterAddreess[j] = "http://image.tmdb.org/t/p/w185/" + posterPath;
                }
                for (String s : posterAddreess) {
                    Log.v(LOG_TAG, "Thumbnail Links: " + s);
                }
                return posterAddreess;
            }

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

                HttpURLConnection urlConnection = null;
                BufferedReader reader = null;
                String JsonData = null;

                String country = "US";
                String rating = "R";
                String sort = "popularity.desc";
                String apiKey = "";
                //building the URL for the movie DB

                try {
                    //building the URL for the movie DB
                    final String MovieDatabaseUrl = "https://api.themoviedb.org/3/discover/movie?";
                    final String Country_for_release = "certification_country";
                    final String Rating = "certification";
                    final String Sorting_Order = "sort_by";
                    final String Api_Id = "api_key";

                    Uri buildUri = Uri.parse(MovieDatabaseUrl).buildUpon()
                            .appendQueryParameter(Country_for_release, country)
                            .appendQueryParameter(Rating, rating)
                            .appendQueryParameter(Sorting_Order, sort)
                            .appendQueryParameter(Api_Id, apiKey)
                            .build();

                    //Converting URI to URL
                    URL url = new URL(buildUri.toString());
                    Log.v(LOG_TAG, "Built URI = "+ buildUri.toString());


                    //Create the request to the Movie Database
                    urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("GET");
                    urlConnection.connect();

                    //Read the input from the database into string
                    InputStream inputStream = urlConnection.getInputStream();

                    //StringBuffer for string Manipulation
                    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;
                    }
                    JsonData = buffer.toString();
                    Log.v(LOG_TAG,"Forecaast Jason String" + JsonData );
                } catch (IOException 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);
                        }
                    }
                    try {
                        return extractdisplayFromJason(JsonData);
                    } catch (JSONException e) {
                        Log.e(LOG_TAG, e.getMessage(), e);
                        e.printStackTrace();
                    }
                }
                return null;
            }
            protected void onPostExecute(String[] posterAddreess) {

                    for (String poster : posterAddreess) {
                        display.addItem(poster);
                    }


            }
        }
    }
package com.example.popularmovis;
导入android.app.Fragment;
导入android.content.SharedReferences;
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.preference.PreferenceManager;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.GridView;
导入android.os.AsyncTask;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.jar.JarException;
/**
*包含简单视图的占位符片段。
*/
公共类DataFragment扩展了片段{
公共图像适配器显示;
公共数据片段(){
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//添加此行,以便此片段处理菜单事件。
设置选项菜单(真);
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
充气机。充气(R.menu.datafragment_菜单,菜单);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u刷新){
FetchMovieData movieData=新的FetchMovieData();
movieData.execute();
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.fragment_main,容器,错误);
display=newimageadapter(rootView.getContext());
GridView GridView=(GridView)rootView.findviewbyd(R.id.GridView\u movies);
setAdapter(display);//使用该视图而不是getActivity()获取上下文。
返回rootView;
}
公共类FetchMovieData扩展异步任务{
私有最终字符串LOG_TAG=FetchMovieData.class.getSimpleName();
私有字符串[]extractdisplayFromJason(字符串jasnData)
抛出JSONException{
//需要提取这些数据
最终字符串movie_results=“results”;
最终字符串电影\u poster=“poster\u path”;
JSONObject movieData=新的JSONObject(Jasnada);
JSONArray movieArray=movieData.getJSONArray(movie\u结果);
String[]PosterAddress=新字符串[movieArray.length()];
//用要显示的URL填充PosterAddress
对于(int j=0;jpackage com.example.popularmovis;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import com.example.popularmovis.R;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    public ArrayList<String> images = new ArrayList<String>();
    public ImageAdapter(Context c){
        mContext = c;
    }

    @Override
    public int getCount(){
        return images.size();
    }

    @Override
    public Object getItem(int position){
        return images.get(position);
    }

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

    public View getView(int position, View convertView, ViewGroup parent){
        ImageView imageview;
        if (convertView == null){
            imageview = new ImageView(mContext);
            imageview.setPadding(0, 0, 0, 0);
            //imageview.setLayoutParams(new GridLayout.MarginLayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            imageview.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
            imageview.setAdjustViewBounds(true);
        } else {
            imageview = (ImageView) convertView;
        }

        Picasso.with(mContext).load(images.get(position)).placeholder(R.mipmap.ic_launcher).into(imageview);
        return imageview;
    }

    /*
    Custom methods
     */
    public void addItem(String url){
        images.add(url);
    }

    public void clearItems() {
        images.clear();
    }
}
ImageAdapter display = new ImageAdapter(rootView.getContext());
private ImageAdapter display;
display = new ImageAdapter(rootView.getContext());