在android studio中显示数据从数据库中的列表视图

问题描述:

所以我试图创建一个数据库和数据正在保存在数据库中,但我想获得主要活动列表视图中的数据,所以我试着在这里的主要活动在android studio中显示数据从数据库中的列表视图

import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.support.design.widget.FloatingActionButton; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.List; 

import static com.frolicfreak.bhushan.memo.DatabaseHelper.Table_Name; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 

FloatingActionButton fab; 
DatabaseHelper db; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    db =new DatabaseHelper(this); 

    fab= (FloatingActionButton)findViewById(R.id.fab); 
    fab.setOnClickListener(this); 

    ListView listView = (ListView)findViewById(R.id.list); 

    ArrayList<String> theList =new ArrayList<>(); 
    Cursor data= db.getAllData(); 

    if (data.getCount()==0){ 
     return; 
    } 
    else 
    { 
     while(data.moveToNext()){ 
      theList.add(getString(1)); 
      ListAdapter listAdapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,theList); 
      listView.setAdapter(listAdapter); 
     } 
    } 
} 

@Override 
public void onClick(View v) { 

    Intent intent= new Intent(this,Main2Activity.class); 
    startActivity(intent); 

} 

}

现在我执行这个活动并没有在Android显示器

08-25 02:13:23.179 4125-4125/com.frolicfreak.bhushan.memo E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.frolicfreak.bhushan.memo, PID: 4125 
                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.frolicfreak.bhushan.memo/com.frolicfreak.bhushan.memo.MainActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x1 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5417) 
                      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) 
                     Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x1 
                      at android.content.res.Resources.getText(Resources.java:312) 
                      at android.content.res.Resources.getString(Resources.java:400) 
                      at android.content.Context.getString(Context.java:409) 
                      at com.frolicfreak.bhushan.memo.MainActivity.onCreate(MainActivity.java:47) 
                      at android.app.Activity.performCreate(Activity.java:6237) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
                      at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:148)  
                      at android.app.ActivityThread.main(ActivityThread.java:5417)  
                      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)  

错误该应用程序是越来越主发射活动 甚至崩溃,所以请帮我解决这个问题

是数据库的辅助文件扩展 DatabaseHelper的java文件如下

package com.frolicfreak.bhushan.memo; 

    import android.content.ContentValues; 
    import android.content.Context; 
    import android.database.Cursor; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.database.sqlite.SQLiteOpenHelper; 

    import java.util.ArrayList; 

    /** 
* Created by BHUSHAN on 24-08-2017. 
*/ 

    public class DatabaseHelper extends SQLiteOpenHelper { 

public static final String Database_Name = "Memo.db"; 
public static final String Table_Name = "Memo"; 
public static final String col1 = "ID"; 
public static final String col2 = "data"; 


public DatabaseHelper(Context context) { 
    super(context, Database_Name, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 

    db.execSQL("create table " + Table_Name + "(ID integer primary key autoincrement, data text)"); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("drop table if exists " + Table_Name); 
    onCreate(db); 
} 

public boolean insertData(String data, String Data) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(col2, Data); 
    long result = db.insert(Table_Name, null, contentValues); 
    if (result==-1) 
     return false; 
    else 
     return true; 
} 

public Cursor getAllData() { 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor res = db.rawQuery("SELECT * FROM " + Table_Name, null); 
    return res; 
} 

}

+0

是DatabaseHelper扩展SQLiteOpenHelper ??如果是的话编辑该问题添加更多代码! – Xenolion

+0

另外,请告诉我们第47行。 – jdv

+0

yes DatabaseHelper扩展 –

第一次尝试编辑代码

theList.add(getString(1))的线theList.add(data.getString(1))

如果在此之后它不工作,给你更多的代码DBhelper类。

+0

嘿谢谢你哟它的工作 现在你能解释为什么它没有帮助? –

+1

请接受我的回答(点击我的回答)。因为你应该调用你的游标数据实例的索引而不是索引。这里“theList.add(getString(1));”你waner添加对象从游标数据实例知道对象的索引,所以你应该参考你的游标数据实例中的对象的索引)..就像“data.getString(1)” –

+0

我没有点击你的答案我实际上新点击这里 我点击箭头 下面的刻度线,谢谢你解释 –

这是由于应用程序无法找到具有给定ID的任何字符串资源而引起的。您需要给予字符串资源ID,而不是任何像1那样的随机整数,因为您已给出theList.add(getString(1));

+0

谢谢你指出它 我用 替换它theList.add(data.getString(1)); –

您遇到的一个问题是您正在创建适配器,然后为每次迭代设置ListView的适配器,您应该只在阵列完全构建时创建一次ListAdpater,同样,您应该只设置适配器一次。

你并不需要使用ListAdapter你可以用它简化事项,例如一个CursorAdapter: -

Cursor data= db.getAllData(); 
    SimpleCursorAdapter sca = new SimpleCursorAdapter(this, 
      android.R.layout.simple_list_item_1, 
      data, 
      new String[]{data.getColumnname(1)}, 
      new int[]{android.R.id.text1}, 0); 
    listview.setAdapter(sca); 

注意一个CursorAdapter需要一个叫做_id列,因此上述可能需要确保它确实。

以上可以取代: -

ArrayList<String> theList =new ArrayList<>(); 
    Cursor data= db.getAllData(); 

    if (data.getCount()==0){ 
     return; 
    } 
    else 
    { 
     while(data.moveToNext()){ 
      theList.add(getString(1)); 
      ListAdapter listAdapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,theList); 
      listView.setAdapter(listAdapter); 
     } 
    } 

附:未经测试,因此可能会出现一些错误。

注意!完成后应关闭游标。所以我建议使用onDestroy方法来关闭游标,例如

@Override 
    public void onDestroy() { 
     super.onDestroy(); 
     data.close(); 
    } 

或者使用一个中间数组,那么你可以使用: -

ArrayList<String> theList = new ArrayList<>(); 
    Cursor data= db.getAllData(); 
    while (data.moveToNext()) { 
     theList.add(data.getString(1)); 
    } 
    ListAdapter listadpater = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, 
      theList 
    ); 
    listview.setAdapter(listadpater); 

注意!这假设您的光标至少有2列,因为getString(1)实际上是从第二列中获取数据。

它正在工作的人,但现在当我保存时,数据并没有立即更新,当我回去时,新的数据添加不显示,但是当我再次打开应用程序数据更新 如何做到这一点? 我应该上传哪些文件,如果有什么遗漏