有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java setAdapter gridview发送上下文

我有一段代码(第2行)返回:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.安卓.projecti_popularmovies/com.example.安卓.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();
        }
    });
}  

在此之前我已经检查了GetArrayImage,并且它不为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) 个答案

  1. # 1 楼答案

    声明一个全局变量

    public Context mContext;
    

    OnCreate()中,执行以下操作:

    mContext = this;
    

    然后您可以调用setAdapter,您的Context将不会为空

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

    编辑

    尝试改用MainActivity.this

  2. # 2 楼答案

    而不是

    MainActivity.this
    

    使用getApplicationContext()