首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android GridView 適配器空指針異常排查:findViewById 未賦值

     編輯:程式設計疑難解答

自定義 GridView 時報 NullPointerException,原因極其隱蔽:gridView.findViewById(R.id.gridView) 未將返回值賦給成員變量。本文還原現場並給出修正方案。

錯誤代碼片段

public class AtyUsingGridView extends Activity {
    private GridView gridView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.aty_using_gridview);
        ImageGridViewAdapter adapter = new ImageGridViewAdapter(this);
        gridView.findViewById(R.id.gridView); // ❌ 返回值未賦值
        gridView.setAdapter(adapter);         // ❌ gridView 仍為 null
    }
}

異常堆疊

Unable to start activity
java.lang.NullPointerException
    at AtyUsingGridView.onCreate(...)

修正方案

gridView = findViewById(R.id.gridView); // ✅ 正確寫法
// 或
gridView = (GridView) findViewById(R.id.gridView);
gridView.setAdapter(adapter);

原理解析

  • findViewById 返回 View 實例,不會自動賦值給同名字段。
  • 調用 gridView.findViewById(...) 時,gridView 為 null,拋出 NPE(但此處因未賦值,實際調用的是 Activity.findViewById,返回 View 卻未保存,導致後續 gridView.setAdapter 空指針)。

避坑指南

  1. 習慣寫法:gridView = findViewById(R.id.gridView);
  2. 使用 ViewBinding / DataBinding 消除手動綁定錯誤。
  3. 調試時對關鍵 View 斷點檢查非空。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved