Android 调用onLoadFinished()时的java.lang.NullPointerException 公共类CatalogActivity扩展了AppCompatActivity实现 LoaderManager.LoaderCallbacks{ 私有静态最终整数产品加载程序=0; ProductCursorAdapter mCursorAdapter; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_目录); ListView productsListView=(ListView)findViewById(R.id.list); 视图emptyView=findViewById(R.id.empty\u视图); productsListView.setEmptyView(emptyView); ProductCursorAdapter mCursorAdapter=新ProductCursorAdapter(此为空); productsListView.setAdapter(mCursorAdapter); FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab); fab.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ 意向意向=新意向(CatalogActivity.this、AddProductActivity.class); 星触觉(意向); } }); productsListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){ 意向意向=新意向(CatalogActivity.this、DetailEditActivity.class); Uri currentProductUri=ContentUris.withAppendedId(ProductContract.ProductEntry.CONTENT\u Uri,id); intent.setData(currentProductUri); 星触觉(意向); } }); Log.e(“工作罚款”、“产品”); getSupportLoaderManager().initLoader(PRODUCT_LOADER,null,this); } onLoadFinished()方法是: public void onLoadFinished(加载器、光标数据){ mCursorAdapter.swapCursor(数据); }

Android 调用onLoadFinished()时的java.lang.NullPointerException 公共类CatalogActivity扩展了AppCompatActivity实现 LoaderManager.LoaderCallbacks{ 私有静态最终整数产品加载程序=0; ProductCursorAdapter mCursorAdapter; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_目录); ListView productsListView=(ListView)findViewById(R.id.list); 视图emptyView=findViewById(R.id.empty\u视图); productsListView.setEmptyView(emptyView); ProductCursorAdapter mCursorAdapter=新ProductCursorAdapter(此为空); productsListView.setAdapter(mCursorAdapter); FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab); fab.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ 意向意向=新意向(CatalogActivity.this、AddProductActivity.class); 星触觉(意向); } }); productsListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){ 意向意向=新意向(CatalogActivity.this、DetailEditActivity.class); Uri currentProductUri=ContentUris.withAppendedId(ProductContract.ProductEntry.CONTENT\u Uri,id); intent.setData(currentProductUri); 星触觉(意向); } }); Log.e(“工作罚款”、“产品”); getSupportLoaderManager().initLoader(PRODUCT_LOADER,null,this); } onLoadFinished()方法是: public void onLoadFinished(加载器、光标数据){ mCursorAdapter.swapCursor(数据); },android,nullpointerexception,simplecursoradapter,Android,Nullpointerexception,Simplecursoradapter,我一直收到如下错误: java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.database.Cursor.com.example.android.gloyInventory.ProductCursorAdapter.swapCursor(android.database.Cursor)” 我的代码有问题吗? 提前感谢。因为您正在类的上下文中创建ProductCursorAdapter mCursorAdapter,但初始化另一个局部变量,而

我一直收到如下错误: java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.database.Cursor.com.example.android.gloyInventory.ProductCursorAdapter.swapCursor(android.database.Cursor)”

我的代码有问题吗?
提前感谢。

因为您正在类的上下文中创建
ProductCursorAdapter mCursorAdapter
,但初始化另一个局部变量,而不是创建时的
局部变量。下面是有问题的一行:

ProductCursorAdapter mCursorAdapter=newproductcursoradapter(this,null);

应该是:


mCursorAdapter=new ProductCursorAdapter(this,null);

因为您正在类的上下文中创建
ProductCursorAdapter mCursorAdapter
,但在创建时初始化另一个局部变量,而不是
onCreate
中的那个。下面是有问题的一行:

ProductCursorAdapter mCursorAdapter=newproductcursoradapter(this,null);

应该是:

mCursorAdapter=newproductcursoradapter(this,null);
onCreate()
中的,而不是:

public class CatalogActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks { private static final int PRODUCT_LOADER = 0; ProductCursorAdapter mCursorAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_catalog); ListView productsListView = (ListView) findViewById(R.id.list); View emptyView = findViewById(R.id.empty_view); productsListView.setEmptyView(emptyView); ProductCursorAdapter mCursorAdapter = new ProductCursorAdapter(this, null); productsListView.setAdapter(mCursorAdapter); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(CatalogActivity.this, AddProductActivity.class); startActivity(intent); } }); productsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int position, long id) { Intent intent = new Intent(CatalogActivity.this, DetailEditActivity.class); Uri currentProductUri = ContentUris.withAppendedId(ProductContract.ProductEntry.CONTENT_URI, id); intent.setData(currentProductUri); startActivity(intent); } }); Log.e("working fine" , "product"); getSupportLoaderManager().initLoader(PRODUCT_LOADER, null, this); } And the onLoadFinished() method is : public void onLoadFinished(Loader loader, Cursor data) { mCursorAdapter.swapCursor(data); } 做:

您正在
onCreate()
中创建一个局部变量,因此类上的字段保持未初始化状态。

onCreate()
中,而不是:

public class CatalogActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks { private static final int PRODUCT_LOADER = 0; ProductCursorAdapter mCursorAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_catalog); ListView productsListView = (ListView) findViewById(R.id.list); View emptyView = findViewById(R.id.empty_view); productsListView.setEmptyView(emptyView); ProductCursorAdapter mCursorAdapter = new ProductCursorAdapter(this, null); productsListView.setAdapter(mCursorAdapter); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(CatalogActivity.this, AddProductActivity.class); startActivity(intent); } }); productsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int position, long id) { Intent intent = new Intent(CatalogActivity.this, DetailEditActivity.class); Uri currentProductUri = ContentUris.withAppendedId(ProductContract.ProductEntry.CONTENT_URI, id); intent.setData(currentProductUri); startActivity(intent); } }); Log.e("working fine" , "product"); getSupportLoaderManager().initLoader(PRODUCT_LOADER, null, this); } And the onLoadFinished() method is : public void onLoadFinished(Loader loader, Cursor data) { mCursorAdapter.swapCursor(data); } 做:


您正在
onCreate()
中创建一个局部变量,因此类上的字段保持未初始化状态。

onCreate()中的
ProductCursorAdapter mCursorAdapter=…
行的开头删除
ProductCursorAdapter
,因为这声明了一个名为
mCursorAdapter
的局部变量,并且字段
mCursorAdapter
保持为空。从
onCreate()中的
ProductCursorAdapter mCursorAdapter=…
行的开头删除
ProductCursorAdapter
,因为它声明了一个名为
mCursorAdapter
的局部变量,并且字段
mCursorAdapter
保持为空。做得好,downvoter。做得好,downvoter。感谢您的详细解释。感谢您的详细解释。
mCursorAdapter = new ProductCursorAdapter(this, null);