2017-08-24 420 views
0

所以我試圖創建一個數據庫和數據正在保存在數據庫中,但我想獲得主要活動列表視圖中的數據,所以我試着在這裏的主要活動在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擴展 –

回答

2

第一次嘗試編輯代碼

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

如果在此之後它不工作,給你更多的代碼DBhelper類。

+0

嘿謝謝你喲它的工作 現在你能解釋爲什麼它沒有幫助? –

+1

請接受我的回答(點擊我的回答)。因爲你應該調用你的遊標數據實例的索引而不是索引。這裏「theList.add(getString(1));」你waner添加對象從遊標數據實例知道對象的索引,所以你應該參考你的遊標數據實例中的對象的索引)..就像「data.getString(1)」 –

+0

我沒有點擊你的答案我實際上新點擊這裏 我點擊箭頭 下面的刻度線,謝謝你解釋 –

1

這是由於應用程序無法找到具有給定ID的任何字符串資源而引起的。您需要給予字符串資源ID,而不是任何像1那樣的隨機整數,因爲您已給出theList.add(getString(1));

+0

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

0

您遇到的一個問題是您正在創建適配器,然後爲每次迭代設置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)實際上是從第二列中獲取數據。

0

它正在工作的人,但現在當我保存時,數據並沒有立即更新,當我回去時,新的數據添加不顯示,但是當我再次打開應用程序數據更新 如何做到這一點? 我應該上傳哪些文件,如果有什麼遺漏

相關問題