Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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 Can';t似乎无法将图像放入网格视图中_Java_Android_Image_Gridview_Android Image - Fatal编程技术网

Java Can';t似乎无法将图像放入网格视图中

Java Can';t似乎无法将图像放入网格视图中,java,android,image,gridview,android-image,Java,Android,Image,Gridview,Android Image,我正试图从TMDb中提取电影海报,并在gridview中显示它们。如果我制作了一个假的ArrayList来保存URL,我就可以得到图像来显示。当我尝试使用解析json得到的URL时,没有显示任何图像。这是我的代码和任务代码 import android.net.Uri; import android.os.AsyncTask; import android.util.Log; import org.json.JSONArray; import org.json.JSONException; i

我正试图从TMDb中提取电影海报,并在gridview中显示它们。如果我制作了一个假的ArrayList来保存URL,我就可以得到图像来显示。当我尝试使用解析json得到的URL时,没有显示任何图像。这是我的代码和任务代码

import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;

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.ArrayList;



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

    private ArrayList<String> mPosterPathArray = new ArrayList<>();
    final String LOG_TAG = fetchMoviesTask.class.getSimpleName();

    private String[] getMovieDataFromJson(String jsonString) throws JSONException {

        final String TMDB_RESULTS = "results";
        final String TMDB_OVERVIEW = "overview";
        final String TMDB_TITLE = "title";
        final String TMDB_RELEASE_DATE = "release_date";
        final String TMDB_POSTER_PATH = "poster_path";

        JSONObject movieJson = new JSONObject(jsonString);
        JSONArray movieArray = movieJson.getJSONArray(TMDB_RESULTS);

        String[] resultStrs = new String[20];

        for (int i = 0; i < movieArray.length(); i++) {
            String title;
            String overview;
            String releaseDate;

            JSONObject movieInfo = movieArray.getJSONObject(i);

            title = movieArray.getJSONObject(i).getString(TMDB_TITLE);

            resultStrs[i] = title;
        }

        for (int i = 0; i < movieArray.length(); i++) {
            String posterPath = "http://image.tmdb.org/t/p/w780/" + movieArray.getJSONObject(i).getString(TMDB_POSTER_PATH);
            mPosterPathArray.add(posterPath);
        }
        return resultStrs;
    }

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


        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;

        String jsonStr = null;

        String sortBy = "popularity.desc";
        String apiKey = "***APIKEYHERE***";

        try {
            final String API_BASE = "https://api.themoviedb.org/3/discover/movie?";

            final String API_SORT = "sort_by=";
            final String API_KEY = "api_key";

            Uri builtUri = Uri.parse(API_BASE).buildUpon()
                    .appendQueryParameter(API_SORT, sortBy)
                    .appendQueryParameter(API_KEY, apiKey)
                    .build();

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

            //Create Request to connect to TMDb
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();

            //Read inputstream
            InputStream inputStream = urlConnection.getInputStream();
            StringBuffer stringBuilder = new StringBuffer();
            if (inputStream == null) {
                jsonStr = 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.
                stringBuilder.append(line + "\n");
            }

            if (stringBuilder.length() == 0) {
                jsonStr = null;
            }

            jsonStr = stringBuilder.toString();

        } catch (IOException e) {
            Log.e(LOG_TAG, "Error ", e);
            // If the code didn't successfully get the weather data, there's no point in attempting
            // to parse it.
            jsonStr = null;
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
            if (reader != null) {
                try {
                    reader.close();
                } catch (final IOException e) {
                    Log.e("PlaceholderFragment", "Error closing stream", e);
                }

            }
        }

        try {
            return getMovieDataFromJson(jsonStr);
        } catch (JSONException e) {
            Log.e(LOG_TAG, e.getMessage(), e);
            e.printStackTrace();
        }

        return null;
    }
public ArrayList<String> getPosterPathArray(){
    return mPosterPathArray;
}
}
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.util.Log;
导入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.ArrayList;
公共类fetchMoviesTask扩展了AsyncTask{
私有ArrayList mPosterPathArray=新ArrayList();
最终字符串LOG_TAG=fetchMoviesTask.class.getSimpleName();
私有字符串[]getMovieDataFromJson(字符串jsonString)抛出JSONException{
最终字符串TMDB_RESULTS=“RESULTS”;
最终字符串TMDB_OVERVIEW=“OVERVIEW”;
最终字符串TMDB_TITLE=“TITLE”;
最终字符串TMDB_RELEASE_DATE=“RELEASE_DATE”;
最终字符串TMDB_POSTER_PATH=“POSTER_PATH”;
JSONObject movieJson=新的JSONObject(jsonString);
JSONArray movieArray=movieJson.getJSONArray(TMDB_结果);
字符串[]resultStrs=新字符串[20];
对于(int i=0;i
这是我的主要片段代码。如果我将硬编码的url传递到realMoviePosters中,那么图像就会显示出来。如果我试图从fetchMoviesTask获取arraylist,它将不起作用

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;

import java.util.ArrayList;


public class MovieFragment extends Fragment {
    public ArrayList<String> realMoviePosters = new ArrayList<>();


    public MovieFragment() {
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_movie, container, false);

        fetchMoviesTask fmt = new fetchMoviesTask();
        fmt.execute();

        //binding to GridView
        ImageAdapter test = new ImageAdapter(getActivity(), realMoviePosters);
        GridView gridView = (GridView) rootView.findViewById(R.id.gridview_movie);
        gridView.setAdapter(test);


        return rootView;
    }
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.GridView;
导入java.util.ArrayList;
公共类MovieFragment扩展了片段{
public ArrayList realMoviePosters=new ArrayList();
公共电影片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u电影,容器,false);
fetchMoviesTask fmt=新建fetchMoviesTask();
fmt.execute();
//绑定到GridView
ImageAdapter测试=新的ImageAdapter(getActivity(),realMoviePosters);
GridView GridView=(GridView)rootView.findviewbyd(R.id.GridView\u movie);
setAdapter(测试);
返回rootView;
}
这是我的图像适配器

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

import com.squareup.picasso.Picasso;

import java.util.ArrayList;

public class ImageAdapter extends BaseAdapter{

    private Context mContext;
    private ArrayList<String> mTest;
    public ImageAdapter(Context c, ArrayList test){
        mContext = c;
        mTest = test;
    }

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

    @Override
    public Object getItem(int i) {
        return mTest.get(i);
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ImageView imageView = new ImageView(mContext);
        Picasso.with(mContext)
                .load(mTest.get(i))
                .into(imageView);
        return imageView;
    }
}
导入android.content.Context;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入com.squareup.picasso.picasso;
进口