setAdapter gridview发送上下文

时间:2015-09-23 19:14:46

标签: java android gridview

我有这段代码(LINE 2)正在返回:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.projecti_popularmovies/com.example.android.projecti_popularmovies.MainActivity}: java.lang.NullPointerException

我的代码是:

public class MainActivity extends AppCompatActivity {

public MovieFragment mMovieFragment;
public Context mContext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    mContext = this;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mMovieFragment = new MovieFragment();
    if(savedInstanceState == null){
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, mMovieFragment)
                .commit();
    }
    if(mMovieFragment.getArrayImages() == null){
        Log.v(null, "Array is empty");
    }
    GridView gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(this, mMovieFragment.getArrayImages()));

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

我在此之前检查过getArrayImages并且它不为null,我也尝试通过getActivity()发送活动,但是找不到方法getActivity()。

这个这个词指的是这个活动背景

这是我的ImageAdapter类的构造函数:

public ImageAdapter(Context context, String[] images) {  

这是填充mArrayImages的代码:

    private Void getMovieImagesFromJson(String movieJSONstr) throws JSONException {

        final String OWM_RESULTS = "results";
        final String OWM_POSTERPATH = "poster_path";

        JSONObject movieJson = new JSONObject(movieJSONstr);
        JSONArray movieArray = movieJson.getJSONArray(OWM_RESULTS);

        Log.v("SIZE MOVIE ARRAY: ", Integer.toString(movieArray.length()));

        for(int i = 0; i < movieArray.length(); i++) {
            JSONObject movieObj = movieArray.getJSONObject(i);
            mArrayImages[i] = movieObj.getString(OWM_POSTERPATH);
        }

        return null;
    }

2 个答案:

答案 0 :(得分:0)

声明GlobalVariable

public Context mContext;

OnCreate()执行此操作:

mContext = this;

然后你可以调用setAdapter,你的Context赢了。

gridView.setAdapter(new ImageAdapter(mContext, mMovieFragment.getArrayImages()));

修改

尝试改为使用MainActivity.this

答案 1 :(得分:0)

而不是

MainActivity.this

使用getApplicationContext()