尝试调用虚拟方法';java.lang.String android.content.Context.getPackageName()';关于nullobjectreference
我试图从我的sqlite数据库中获取一些数据->在RecyclerView中显示它->点击一个项目,我想开始一个新的活动 但当我点击其中一个项目时,在显示项目列表后,会弹出以下错误: java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String android.content.Context.getPackageName()” 我的主要活动类:尝试调用虚拟方法';java.lang.String android.content.Context.getPackageName()';关于nullobjectreference,java,android,sqlite,nullpointerexception,android-sqlite,Java,Android,Sqlite,Nullpointerexception,Android Sqlite,我试图从我的sqlite数据库中获取一些数据->在RecyclerView中显示它->点击一个项目,我想开始一个新的活动 但当我点击其中一个项目时,在显示项目列表后,会弹出以下错误: java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String android.content.Context.getPackageName()” 我的主要活动类: import android.content.Context; import andro
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.widget.Toast;
import com.example.blue2dew.trakin.Item.item;
import com.example.blue2dew.trakin.MovieAdapter;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mtoggle;
private NavigationView navigationView;
private Toolbar toolbar;
private Movie_det movie_det;
Context context;
private RecyclerView recyclerView;
private DatabaseHelper databaseHelper;
ArrayList<item> arrayList=new ArrayList<item>();
private Cursor cursor;
private MovieAdapter movieAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout=(DrawerLayout) findViewById(R.id.activity_main);
navigationView=(NavigationView)findViewById(R.id.navigation_view);
toolbar=(Toolbar)findViewById(R.id.nav_action);
setSupportActionBar(toolbar);
mtoggle=new ActionBarDrawerToggle(this,mDrawerLayout,R.string.open,R.string.close);
recyclerView=(RecyclerView)findViewById(R.id.recycler_view);
mDrawerLayout.addDrawerListener(mtoggle);
mtoggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
item.setChecked(true);
mDrawerLayout.closeDrawers();
return false;
}
});
loadDatabase();
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
if(mtoggle.onOptionsItemSelected(item)){
return true;
}
return super.onOptionsItemSelected(item);
}
public void loadDatabase(){
databaseHelper=new DatabaseHelper(MainActivity.this);
try{
databaseHelper.checkAndCopyDatabase();
databaseHelper.openDatabase();
}catch(SQLiteException e){
e.printStackTrace();
}
try {
cursor = databaseHelper.QueryData("select * from movieDetails");
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
item itemv = new item();
itemv.setMovieName(cursor.getString(2));
itemv.setReleaseDate(cursor.getString(5));
itemv.setMovieImage(cursor.getBlob(1));
arrayList.add(itemv);
} while (cursor.moveToNext());
}
}
}catch (SQLiteException e){
e.printStackTrace();
}
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getApplicationContext());
movieAdapter=new MovieAdapter(MainActivity.this,context,arrayList);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(movieAdapter);
}
}
错误:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.blue2dew.trakin, PID: 7430 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ComponentName.(ComponentName.java:128)
at android.content.Intent.(Intent.java:4521) at com.example.blue2dew.trakin.MovieAdapter$MovieViewHolder.onClick(MovieAdapter.java:127)
at android.view.View.performClick(View.java:5209)
at android.view.View$PerformClick.run(View.java:21179)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5437)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
你可以这样做
@Override
public void onClick(View v) {
int position=getAdapterPosition();
item item=this.items.get(position);
Intent intent=new Intent (v.getContext(),Main2Activity.class);
v.getContext().startActivity(intent);
}
可能不相关:当您可以从视图中获取上下文时,视图持有者和适配器中没有上下文和活动。重新打开此NPE是因为不了解Android的工作原理。太普通了,在这种情况下没有帮助。我的错!我刚刚开始学习android。谢谢回复!使用视图获取上下文。谢谢,这很有帮助!如果有帮助的话,请投票支持这个答案。快乐编码!
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.blue2dew.trakin, PID: 7430 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ComponentName.(ComponentName.java:128)
at android.content.Intent.(Intent.java:4521) at com.example.blue2dew.trakin.MovieAdapter$MovieViewHolder.onClick(MovieAdapter.java:127)
at android.view.View.performClick(View.java:5209)
at android.view.View$PerformClick.run(View.java:21179)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5437)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
@Override
public void onClick(View v) {
int position=getAdapterPosition();
item item=this.items.get(position);
Intent intent=new Intent (v.getContext(),Main2Activity.class);
v.getContext().startActivity(intent);
}