访问阵列时出错

时间:2011-07-27 01:21:37

标签: java android gridview arraylist

Noob android开发人员尝试使用我的服务器上保存的缩略图创建一个库:

我正在尝试在ImageAdapter中使用我的ArrayList,以便在创建缩略图列表循环时可以引用我的数组值。我的eclipse包可供下载here,因为我可能无法正确解释。当我尝试并在我的数组中引用我的“拇指”值时,我在尝试创建“mThumbIds”时收到一个未定义的错误以及语法错误

我不知道为什么我很难理解这一点。

showThumb.java:

package com.flash_tattoo;

import android.os.Bundle;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import java.util.ArrayList;
import java.util.List;

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

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class showThumb extends Activity{



    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gridlayout);

         Bundle bundle = getIntent().getExtras();
         String jsonData = bundle.getString("jsonData");


         JSONArray jsonArray = null;
        try {
            jsonArray = new JSONArray(jsonData);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        ArrayList<image_data> myJSONArray = new ArrayList<image_data>();

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

                 JSONObject json_data = null;

                try {
                    json_data = jsonArray.getJSONObject(i);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                 try {
                    image_data.id =  json_data.getInt("id");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                 try {
                    image_data.name = json_data.getString("name");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                 try {
                    image_data.thumb = json_data.getString("thumb");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                 try {
                    image_data.path = json_data.getString("path");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                myJSONArray.add(new image_data());
            }


        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this,myJSONArray));

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(showThumb.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

ImageAdapter:

package com.flash_tattoo;

import java.util.ArrayList;

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

import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;

public class ImageAdapter extends ArrayAdapter<image_data>

{
//This code below was put in when I change from BaseAdapter to ArrayAdapter

    public ImageAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
        // TODO Auto-generated constructor stub
    }

    private Context mContext;

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

    public image_data getItem(int position) {
        return null;
    }

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

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {

            for(int i=0;i<myJSONArray.lenght();i++){
                Object[] myJSONArray;
                setImageDrawable(Drawable.createFromPath(myJSONArray[i].thumb)
            };

    };
}

1 个答案:

答案 0 :(得分:1)

你有一个类型为Integer []的私有字段mThumbIds并且你正在尝试将其初始化为内联,但是你没有这样做,因为你有一个带语句的静态块{}。

我想说你需要宣布:

private Integer[] mThumbIds;

然后,在构造函数中,您可以填充数组。