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(数据); }
我一直收到如下错误: java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.database.Cursor.com.example.android.gloyInventory.ProductCursorAdapter.swapCursor(android.database.Cursor)” 我的代码有问题吗?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,但初始化另一个局部变量,而
提前感谢。因为您正在类的上下文中创建
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);