【问题标题】:On item click grid view and SQLite - Android在项目上单击网格视图和 SQLite - Android
【发布时间】:2016-06-01 10:39:05
【问题描述】:

我想根据网格项点击来填充列表视图。如果用户单击第一个网格项,我想根据它显示列表视图。我在这里使用了预填充的 SQLite 数据库。

我尝试的是,在第一个活动中获取项目点击 id 并将其传递给 DB 类。但它不起作用。请帮我解决问题。

来自 Main Activity 类。

            grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {


                    Intent i=new Intent(MainActivity.this ,ContactView.class);
                    i.putExtra("ID_EXTRA",String.valueOf(id));
                    startActivity(i);

                }




            });

这就是我检索点击的 id 并将变量等同于 SQL Query 的方式。

public List<String> getQuotes() {
    List<String> list = new ArrayList<>();
    Integer value;

    Bundle extras = getIntent().getExtras();
    String a = extras.getString("ID_EXTRA");

    if(extras != null)
    {

        Cursor cursor = database.rawQuery("SELECT org_name FROM org_name WHERE category_id='ID_EXTRA'", null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            list.add(cursor.getString(0));
            cursor.moveToNext();
            cursor.close();
        }
    }

  /*  if (passedVar != null) {


    }*/

    return list;
}

日志猫

   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sra.hellosrilanka/com.example.sra.hellosrilanka.ContactView}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
        at android.app.ActivityThread.access$800(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference
        at com.example.sra.hellosrilanka.DBAccess.getQuotes(DBAccess.java:50)
        at com.example.sra.hellosrilanka.ContactView.onCreate(ContactView.java:29)
        at android.app.Activity.performCreate(Activity.java:5990)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)

           

 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
06-01 20:09:52.960    1230-1312/system_process E/InputDispatcher﹕ channel '2d7e5e28 com.example.sra.hellosrilanka/com.example.sra.hellosrilanka.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!

【问题讨论】:

  • 你遇到了什么错误?
  • @Jayanth- 当我单击网格项目时,应用程序已停止。错误在于 Bundle extras = getIntent().getExtras();字符串 a = extras.getString("ID_EXTRA"); List 引号 = databaseAccess.getQuotes();我认为
  • 添加数据库表和logcat报错..
  • @Vishal Chauhan - 更新

标签: android sqlite android-gridview onitemclick


【解决方案1】:

发生此错误是因为您的 getIntent 返回 null 引用,您应该检查调用 getIntent 的位置 - 并且 getIntent() 需要一个在 onCreate() 之前不可用的 Context。所以应该在Activity生命周期的onCreate方法内部或者之后调用。

希望这会对你有所帮助。

【讨论】:

    【解决方案2】:
    database.rawQuery("SELECT org_name FROM org_name WHERE category_id='ID_EXTRA'", null);
    

    把这个改成

    database.rawQuery("SELECT org_name FROM org_name WHERE category_id="+a, null);
    

    我认为必须发送位置而不是 id。id 很长(只是建议参考 onclick 处理程序)

    Bundle extras = getIntent().getExtras();
        String a = extras.getString("ID_EXTRA");
    change to 
     String a =getIntent().getStringExtra("ID_EXTRA");
    

    【讨论】:

    • 谢谢@sush 但这也是停止应用程序的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2014-10-30
    相关资源
    最近更新 更多