Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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 无法在网格视图中获取图像_Java_Android_Gridview - Fatal编程技术网

Java 无法在网格视图中获取图像

Java 无法在网格视图中获取图像,java,android,gridview,Java,Android,Gridview,主要活动: public class MainActivity extends AppCompatActivity { // ImageView iv; public static StringBuffer finalparsedData; public static GridView myGrid; private static final String TAG = MainActivity.c

主要活动:

 public class MainActivity extends AppCompatActivity {

            // ImageView iv;
            public static StringBuffer finalparsedData;
            public static GridView myGrid;
            private static final String TAG = MainActivity.class.getSimpleName();
            ArrayList<String> values = null;

        @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);  

                myGrid=(GridView)findViewById(R.id.grid_view);

                Button btnHit = (Button) findViewById(R.id.btnHit);
                btnHit.setOnClickListener(new View.OnClickListener(){

                    @Override
                    public void onClick(View v) {    
                        new JSONTask().execute("https://api.flickr.com/services/rest/?method=flickr.photos.getRecent&" +
                                "api_key=46e71c8d2b35ba8c9c333a462ec8aea7&per_page=3&format=json&nojsoncallback=10");
                    }
                });
                values = new ArrayList<>();

            }
        /*static boolean isAirplaneModeOn(Context context) {
            ContentResolver contentResolver = context.getContentResolver();
            return Settings.System.getInt(contentResolver, AIRPLANE_MODE_ON, 0) != 0;
        }*/

            public class JSONTask extends AsyncTask<String, Void, String> {

                String photoid;
                int farm;
                String server;
                String secret;

                @Override
                protected String doInBackground(String... params) {
                    HttpURLConnection connection = null;
                    BufferedReader reader = null;


                    StringBuffer buffer = null;
                    JSONArray parentarray = null;

                    try {
                        URL url = new URL(params[0]);
                        connection = (HttpURLConnection) url.openConnection();
                        connection.connect();

                        InputStream stream = connection.getInputStream();
                        reader = new BufferedReader(new InputStreamReader(stream));
                        buffer = new StringBuffer();
                        String line = "";
                        while ((line = reader.readLine()) != null) {
                            buffer.append(line);

                        }
                        String finalJson = buffer.toString();

                        JSONObject parentObject = new JSONObject(finalJson);
                        //JSONObject initialObject = new JSONObject("photos");
                        JSONObject initialObject = parentObject.getJSONObject("photos");
                        parentarray = initialObject.getJSONArray("photo");
                        finalparsedData = new StringBuffer();

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

                            JSONObject finalObject = parentarray.getJSONObject(i);
                            photoid = finalObject.optString("id");
                            farm = finalObject.optInt("farm");
                            server = finalObject.optString("server");
                            secret = finalObject.optString("secret");  
                            finalparsedData.append("https://farm" + farm + ".staticflickr.com/" + server + "/" + photoid+ "_" + secret + ".jpg" +"\n\n");
                            values.add(String.valueOf((finalparsedData)));

                        }    
                        return "done";
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                        return "error";
                    } catch (IOException e) {
                        e.printStackTrace();
                        return "error";
                    } catch (JSONException e) {
                        e.printStackTrace();
                        return "error";
                    } finally {
                        if (connection != null) {
                            connection.disconnect();
                        }

                        try {
                            if (reader != null) {
                                reader.close();
                                return "done";

                            }

                        } catch (IOException e) {
                            e.printStackTrace();
                            return "error";
                        }
                    }
                }

                @Override
                protected void onPostExecute(String result) {

                    switch (result){
                        case "done":
                            MyImageAdapter adapter = new MyImageAdapter(MainActivity.this, values);
                            myGrid.setAdapter((ListAdapter) adapter);
                            break;

                    }

                }
            }
        }
public class MyImageAdapter extends BaseAdapter {

    ArrayList<String> values;
    Context mContext;

    public MyImageAdapter(Context mContext, ArrayList<String> values) {
        this.values = values;
        this.mContext = mContext;
    }

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

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

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


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder;
 ;
        if (row == null){
            LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.grid,parent,false);
             holder = new ViewHolder();
            holder.imageView = (ImageView) row.findViewById(R.id.image_View);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        String image = values.get(position);

        Picasso.with(mContext).load(image).into(holder.imageView);

        return row;
    }
    public class ViewHolder {

        ImageView imageView;
    }
}

我在gridview中加载图像时遇到了一个问题,10张图像中只有1张显示,其余显示“此图像不再可用”

哈哈哈,愚蠢的错误。用这个替换JSONTask中的for循环

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

    JSONObject finalObject = parentarray.getJSONObject(i);
    photoid = finalObject.optString("id");
    farm = finalObject.optInt("farm");
    server = finalObject.optString("server");
    secret = finalObject.optString("secret");  
    String fullPath = "https://farm" + farm + ".staticflickr.com/" + server + "/" + photoid+ "_" + secret + ".jpg";

    values.add(fullPath); 
}
.
.
.
。
.
.
对于(int i=0;i

无需使用
StringBuffer
。您应该使用普通
字符串
变量。:)

您是否从Api获取数据?如果是,则url可能无效。这意味着图像在此url上不可用。检查您正在获取的url的有效性。是的,我正在获取数据,并且url也是有效的。当我使用Log.d检查url时,它是每个图像的显示url,当我在浏览器中检查url时,它会显示图像。“这些图像不再可用”这意味着url不能公开使用。它们在浏览器中打开了吗?是的,图像在浏览器中是打开的,当我使用Log.d时,它的show Images url如下所示