【发布时间】:2018-07-10 05:14:48
【问题描述】:
我正在尝试点击一个 recyclerview 项目并获取点击项目的数据。
这一次,我想使用一种方法来查询数据库并在recyclerview中显示数据。
我在方法运行时遇到了问题。我猜由于上下文,方法在 R.id 找不到 RecyclerView。
这是我尝试的代码,方法在 MainActivity 但不在 onCreate 方法中。
调试时,在下面代码的第一行停止。
public class MainActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRcyView = (RecyclerView) findViewById(R.id.rv);
...
}
public void sqlQuery (String param) {
**mRcyView = (RecyclerView)this.findViewById(R.id.rv);**
mdbHelper = new DB_Helper(this);
mRows = new ArrayList<>();
mRows = mdbHelper.getListRow2(param);
mRvAdapter = new RV_Adapter(this,mRows);
mRcyView.setAdapter(mRvAdapter);
}
}
当禁用 findViewById 行时,查询工作并获得值 mRows。但是 Recyclerview 设置适配器不起作用。
这里是方法第一次调用和RecyclerView适配器代码
public class RV_Adapter extends RecyclerView.Adapter<RV_Adapter.ViewHolder> {
public RV_Adapter(Context rContext, List<EachRow> rows) {
this.rows = rows;
this.rContext = rContext;
}
public class ViewHolder extends RecyclerView.ViewHolder {
...
public ViewHolder(View v, final Context context) {
super(v);
this.context = context;
...
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = getAdapterPosition();
EachRow eachRow = rows.get(pos);
String kSenArab = eachRow.getkSenArab();
MainActivity act = new MainActivity();
act.sqlQuery(kSenArab);
}
});
}
}
}
这是错误日志
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:117)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:56)
at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:31)
at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:31)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:198)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
at com.mustafa.otre.MainActivity.sqlQuery(MainActivity.java:112)
at com.mustafa.otre.RV_Adapter$ViewHolder$1.onClick(RV_Adapter.java:116)
at android.view.View.performClick(View.java:5609)
at android.view.View$PerformClick.run(View.java:22259)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
这不仅仅是空异常问题。它包含上下文到达问题
感谢您的回复。
【问题讨论】:
-
这个方法在哪个类中?
-
mainactivity 类
-
你能用调用这个方法的代码更新你的问题吗?
-
这就够了吗?
-
它仍然没有提到
sqlQuery的调用位置以及您在哪里声明了RecyclerView
标签: android android-recyclerview android-context