Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将数据从SQLDatabase调用到ListView时出错_Android_Sqlite - Fatal编程技术网

Android 将数据从SQLDatabase调用到ListView时出错

Android 将数据从SQLDatabase调用到ListView时出错,android,sqlite,Android,Sqlite,我一直在努力寻找我的项目中的错误,但我仍然没有运气。因为我是编程新手,所以我不能指出这个错误。我在我的主项目的一个对话框中有一个列表视图,我在这里做的是尝试将数据从MySQL数据库浏览器调用到列表视图。我为这段代码做了一个新项目,因为我不想用这段代码把我的主要项目搞砸 package com.pdb.projectdb; import java.util.ArrayList; import android.app.ListActivity; import android.datab

我一直在努力寻找我的项目中的错误,但我仍然没有运气。因为我是编程新手,所以我不能指出这个错误。我在我的主项目的一个对话框中有一个列表视图,我在这里做的是尝试将数据从MySQL数据库浏览器调用到列表视图。我为这段代码做了一个新项目,因为我不想用这段代码把我的主要项目搞砸

 package com.pdb.projectdb;

 import java.util.ArrayList; 

 import android.app.ListActivity;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ArrayAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.Toast;

  public class Main1Activity extends ListActivity {

  private static final String DB_NAME = "yourdb.sqlite3";

  //A good practice is to define database field names as constants
  private static final String TABLE_NAME = "friends";
  private static final String FRIEND_ID = "_id";
  private static final String FRIEND_NAME = "name";

 private SQLiteDatabase database;
 private ListView listView;
 private ArrayList friends;

 @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main1);

    //Our key helper
    ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
    database = dbOpenHelper.openDataBase();
    //That’s it, the database is open!
    fillFreinds();
      setUpList();
  }

  private void setUpList() {
  //We use a standard adapter and an element layout for brevity’s sake
  setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,   
 friends));
 listView = getListView();

 //Let’s set a message shown upon tapping an item
    listView.setOnItemClickListener(new OnItemClickListener() {
 public void onItemClick(AdapterView parent, View view,
 int position,long id) {
 Toast.makeText(getApplicationContext(),
 ((TextView) view).getText() +
      " could be Softeq's friend",
      Toast.LENGTH_SHORT).show();
 }
 }
 }

 //Extracting elements from the database
  private void fillFreinds() {
 friends = new ArrayList<String>();
 Cursor friendCursor = database.query(TABLE_NAME, new String[] {FRIEND_ID,
        FRIEND_NAME}, null, null, null, null, FRIEND_NAME);
 friendCursor.moveToFirst();
 if(!friendCursor.isAfterLast()) {
  do {
 String name = friendCursor.getString(1);
 friends.add(name);
 } while (friendCursor.moveToNext());
  }
friendCursor.close();
 }
  }
项目视图

另外,我的朋友告诉我不要把问题浪费在这里,因为你们可能会被禁止。若我的问题格式不对,请告诉我

多谢各位


替换为此,我为您正确设置了格式

import java.util.ArrayList;
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class Main1Activity extends ListActivity {

    private static final String DB_NAME = "yourdb.sqlite3";

    // A good practice is to define database field names as constants
    private static final String TABLE_NAME = "friends";
    private static final String FRIEND_ID = "_id";
    private static final String FRIEND_NAME = "name";

    private SQLiteDatabase database;
    private ListView listView;
    private ArrayList friends;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);

        // Our key helper
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this,
                DB_NAME);
        database = dbOpenHelper.openDataBase();
        // That’s it, the database is open!
        fillFreinds();
        setUpList();
    }

    private void setUpList() {
        // We use a standard adapter and an element layout for brevity’s sake
        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, friends));
        listView = getListView();

        // Let’s set a message shown upon tapping an item
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View view,
                    int position, long id) {
                Toast.makeText(
                        getApplicationContext(),
                        ((TextView) view).getText()
                                + " could be Softeq's friend",
                        Toast.LENGTH_SHORT).show();
            }

        });

    }

    // Extracting elements from the database
    private void fillFreinds() {
        friends = new ArrayList<String>();
        Cursor friendCursor = database.query(TABLE_NAME, new String[] {
                FRIEND_ID, FRIEND_NAME }, null, null, null, null, FRIEND_NAME);
        friendCursor.moveToFirst();
        if (!friendCursor.isAfterLast()) {
            do {
                String name = friendCursor.getString(1);
                friends.add(name);
            } while (friendCursor.moveToNext());
        }
        friendCursor.close();
    }
}
import java.util.ArrayList;
导入android.app.ListActivity;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类Main1活动扩展了ListActivity{
私有静态最终字符串DB_NAME=“yourdb.sqlite3”;
//一个好的做法是将数据库字段名定义为常量
私有静态最终字符串表\u NAME=“friends”;
私有静态最终字符串FRIEND_ID=“_ID”;
私有静态最终字符串FRIEND_NAME=“NAME”;
专用数据库;
私有列表视图列表视图;
私人ArrayList朋友;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
//我们的主要助手
ExternalDbOpenHelper dbOpenHelper=新的ExternalDbOpenHelper(此,
DB_名称);
database=dbOpenHelper.openDataBase();
//就这样,数据库是开放的!
fillFreinds();
setUpList();
}
私有void setUpList(){
//为了简洁起见,我们使用标准适配器和元素布局
setListAdapter(新阵列适配器)(此,
android.R.layout.simple_list_item_1,friends));
listView=getListView();
//让我们设置一条点击项目时显示的消息
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Toast.makeText(
getApplicationContext(),
((TextView)视图).getText()
+“可能是Softeq的朋友”,
吐司。长度(短)。show();
}
});
}
//从数据库中提取元素
私有的void fillFreinds(){
friends=newarraylist();
Cursor friendCursor=database.query(表名称,新字符串[]){
FRIEND_ID,FRIEND_NAME},null,null,null,null,FRIEND_NAME);
friendCursor.moveToFirst();
如果(!friendCursor.isAfterLast()){
做{
字符串名称=friendCursor.getString(1);
添加(姓名);
}while(friendCursor.moveToNext());
}
friendCursor.close();
}
}

您必须发布logcat错误,我们才能帮助您!我无法运行该项目,因此目前没有记录。还是有办法对不起,我没看到照片。你能告诉我们错误在哪一行吗?(不是行号,因为我们在这里看不到数字)而是有错误的代码段。编辑:希望图片有帮助您没有很好地关闭您的方法。Eclipse告诉你that@coolcat这是一个完全不同的错误!查看有关如何使用ListActivity的教程!我的互联网正在播放,所以无法比我想的更快返回,但当您发现我的错误时,我将勾选此问题的答案。现在我将查看列表活动。谢谢您,mario,您非常有帮助。@coolcat没问题!如果你仍然被卡住,请发布另一个问题:)
     package com.pdb.projectdb;

     import java.io.FileOutputStream;
     import java.io.IOException;
     import java.io.InputStream;
     import java.io.OutputStream;

    import android.content.Context;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;

     public class ExternalDbOpenHelper extends SQLiteOpenHelper {

    //Path to the device folder with databases
    public static String DB_PATH;

    //Database file name
    public static String DB_NAME;
    public SQLiteDatabase database;
     public final Context context;

    public SQLiteDatabase getDb() {
    return database;
    }

     public ExternalDbOpenHelper(Context context, String databaseName) {
     super(context, databaseName, null, 1);
     this.context = context;
     //Write a full path to the databases of your application
     String packageName = context.getPackageName();
     DB_PATH = String.format("/data/data/newDB/databases/", packageName);
     DB_NAME = databaseName;
     openDataBase();
     }

    //This piece of code will create a database if it’s not yet created
    public void createDataBase() {
    boolean dbExist = checkDataBase();
     if (!dbExist) {
     this.getReadableDatabase();
     try {
     copyDataBase();
    } catch (IOException e) {
    Log.e(this.getClass().toString(), "Copying error");
    throw new Error("Error copying database!");
     }
    } else {
      Log.i(this.getClass().toString(), "Database already exists");
    }
     }

     //Performing a database existence check
     private boolean checkDataBase() {
     SQLiteDatabase checkDb = null;
     try {
     String path = DB_PATH + DB_NAME;
     checkDb = SQLiteDatabase.openDatabase(path, null,
     SQLiteDatabase.OPEN_READONLY);
     } catch (SQLException e) {
     Log.e(this.getClass().toString(), "Error while checking db");
     }
     //Android doesn’t like resource leaks, everything should 
    // be closed
     if (checkDb != null) {
     checkDb.close();
       }
         return checkDb != null;
      }

    //Method for copying the database
    private void copyDataBase() throws IOException {
    //Open a stream for reading from our ready-made database
    //The stream source is located in the assets
    InputStream externalDbStream = context.getAssets().open(DB_NAME);

    //Path to the created empty database on your Android device
    String outFileName = DB_PATH + DB_NAME;

    //Now create a stream for writing the database byte by byte
     OutputStream localDbStream = new FileOutputStream(outFileName);

    //Copying the database
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = externalDbStream.read(buffer)) > 0) {
     localDbStream.write(buffer, 0, bytesRead);
     }
    //Don’t forget to close the streams
       localDbStream.close();
    externalDbStream.close();
     }

     public SQLiteDatabase openDataBase() throws SQLException {
     String path = DB_PATH + DB_NAME;
     if (database == null) {
     createDataBase();
     database = SQLiteDatabase.openDatabase(path, null,
     SQLiteDatabase.OPEN_READWRITE);
     }
      return database;
     }

     @Override
     public synchronized void close() {
     if (database != null) {
     database.close();
       }
     super.close();
       }
     @Override
     public void onCreate(SQLiteDatabase db) {}
     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
     }
import java.util.ArrayList;
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class Main1Activity extends ListActivity {

    private static final String DB_NAME = "yourdb.sqlite3";

    // A good practice is to define database field names as constants
    private static final String TABLE_NAME = "friends";
    private static final String FRIEND_ID = "_id";
    private static final String FRIEND_NAME = "name";

    private SQLiteDatabase database;
    private ListView listView;
    private ArrayList friends;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);

        // Our key helper
        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this,
                DB_NAME);
        database = dbOpenHelper.openDataBase();
        // That’s it, the database is open!
        fillFreinds();
        setUpList();
    }

    private void setUpList() {
        // We use a standard adapter and an element layout for brevity’s sake
        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, friends));
        listView = getListView();

        // Let’s set a message shown upon tapping an item
        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View view,
                    int position, long id) {
                Toast.makeText(
                        getApplicationContext(),
                        ((TextView) view).getText()
                                + " could be Softeq's friend",
                        Toast.LENGTH_SHORT).show();
            }

        });

    }

    // Extracting elements from the database
    private void fillFreinds() {
        friends = new ArrayList<String>();
        Cursor friendCursor = database.query(TABLE_NAME, new String[] {
                FRIEND_ID, FRIEND_NAME }, null, null, null, null, FRIEND_NAME);
        friendCursor.moveToFirst();
        if (!friendCursor.isAfterLast()) {
            do {
                String name = friendCursor.getString(1);
                friends.add(name);
            } while (friendCursor.moveToNext());
        }
        friendCursor.close();
    }
}