Android 如何将数据从sqlite listview传递到新的intent?

Android 如何将数据从sqlite listview传递到新的intent?,android,database,listview,data-retrieval,sqlite,Android,Database,Listview,Data Retrieval,Sqlite,(这是我的午餐。从数据库填充listview的类。如果有任何错误,请告诉我。我对此还是新手。) 你能帮我从案例0开始,这样我就可以完成代码了。例如,用户单击BBQ鸡肉三明治。它将导航到display.class并从db中检索信息,并显示图像分级和内容。要通过intent将参数传递给新活动,请使用putExtra(),就像在代码中添加的那样: newActivity.putExtra(“1”、“2”) 第一个参数应该是一个字符串常量,用于标识您的参数,稍后将使用此字符串获取值。第二个参数是值,an

(这是我的午餐。从数据库填充listview的类。如果有任何错误,请告诉我。我对此还是新手。)


你能帮我从案例0开始,这样我就可以完成代码了。例如,用户单击BBQ鸡肉三明治。它将导航到display.class并从db中检索信息,并显示图像分级和内容。

要通过intent将参数传递给新活动,请使用putExtra(),就像在代码中添加的那样: newActivity.putExtra(“1”、“2”)

第一个参数应该是一个字符串常量,用于标识您的参数,稍后将使用此字符串获取值。第二个参数是值,android为所有原语提供了方法


在新的“活动”中,使用getExtra(“1”、“2”),其中1是您先前使用的常量,2是默认值,以防它找不到您使用的值或常量。

您为每种情况都有一个switch语句。您应该有一个switch语句,其中包含许多case。请仔细阅读如何正确使用switch语句来帮助清理代码。谢谢您的回复。我知道您想说什么。但很抱歉再次询问。你说的字符串常量,我迷路了。你能不能仔细看看我的DPOpener文件,告诉我应该在putExtra方法中放入哪个字符串常量?任何字符串都可以,只要在放入和检索时使用相同的字符串即可。然后它取决于您的代码,您可以只传递一个标识符,如putExtra(“com.example.TYPE”,“type1”),或者直接传递查询,如putExtra(“com.example.SQLQUERY”,“select*from db;”)。
 public class Lunch extends Activity implements OnItemClickListener {

DBOpener dbopener;

@Override
protected void onCreate(Bundle savedInstanceState) {

    //for fullscreen view
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dinner);

    dbopener = new DBOpener(this);
}

// Open the DB, query all subject codes and refresh the listview
// when app resumes
@Override
protected void onResume() {
    super.onResume();

    // Configure the listview
    ArrayList<String> mealNames = new ArrayList<String>();
    ListView lstDine = (ListView)this.findViewById(R.id.dine);
    lstDine.setAdapter(new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, mealNames));

    // Open/create the DB
    try {
        dbopener.createDatabase(); // Create DB if necessary
      dbopener.openDatabase(); // Open the DB

      Cursor dinners = dbopener.getLunchNames();
      while (dinners.moveToNext()) {
          mealNames.add(dinners.getString(0)); // Get the current subj
                                                  // code, add to list
      }
      dinners.close();

      // Update the listview
      ArrayAdapter<String> ad = (ArrayAdapter<String>)lstDine.getAdapter();
      ad.notifyDataSetChanged();

      lstDine.setOnItemClickListener(this);
    } catch (Exception e) {
        Toast.makeText(this, "Could not open DB", 
            Toast.LENGTH_LONG).show();
    }
}

// Close the DB when app pauses
@Override
protected void onPause() {
    super.onPause();

    dbopener.close();
}

// When user clicks on an item
public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {
    // Use subject code from listview to retrieve other
      // details with the dbopener

    switch(pos)
    {
    case 0 :
    Intent newActivity = new Intent("com.edu.tp.iit.mns.Display");
    newActivity.putExtra("1", "2"); // this is where im unaware of the codes.how to pass the strings of value to the next page
    startActivity(newActivity);
    break;
    }
    switch(pos)
    {
    case 1 :
    Intent newActivity = new Intent("com.edu.tp.iit.mns.Display");
    startActivity(newActivity); 
    break;
    }
    switch(pos)
    {
    case 2 :
    Intent newActivity = new Intent("com.edu.tp.iit.mns.Display");
    startActivity(newActivity);
    break;
    }
    switch(pos)
    {
    case 3 :
    Intent newActivity = new Intent("com.edu.tp.iit.mns.Display");
    startActivity(newActivity);
    break;
    }
    switch(pos)
    {
    case 4 :
    Intent newActivity = new Intent("com.edu.tp.iit.mns.Display");
    startActivity(newActivity);
    break;
    }
    switch(pos)
    {
    case 5 :
    Intent newActivity = new Intent("com.edu.tp.iit.mns.Display");
    startActivity(newActivity);
    break;
    }
    switch(pos)
    {
    case 6 :
    Intent newActivity = new Intent("com.edu.tp.iit.mns.Display");
    startActivity(newActivity);
    break;
    }
    switch(pos)
    {
    case 7 :
    Intent newActivity = new Intent("com.edu.tp.iit.mns.Display");
    startActivity(newActivity);
    break;
    }

}
  public class Display extends Activity {

DBOpener dbopener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display);   

    dbopener = new DBOpener(this);      
}

@Override
protected void onResume() {
    super.onResume();

    // Configure the listview
  //        ArrayList<String> mealNames = new ArrayList<String>();
  //        ListView lstDine = (ListView)this.findViewById(R.id.dine);
  //        lstDine.setAdapter(new ArrayAdapter<String>(this, 
  //            android.R.layout.simple_list_item_1, mealNames));

    // Open/create the DB
    try {
  //            dbopener.createDatabase(); // Create DB if necessary
      dbopener.openDatabase(); // Open the DB
      Toast.makeText(this, " open DB", 
                Toast.LENGTH_LONG).show();
      Cursor dinners = dbopener.getLunchNames();
      while (dinners.moveToNext()) {
  //              mealNames.add(dinners.getString(0)); // Get the current subj
                                                  // code, add to list
      }
      dinners.close();

      // Update the listview
 //       ArrayAdapter<String> ad = (ArrayAdapter<String>)lstDine.getAdapter();
  //          ad.notifyDataSetChanged();
   //               
  //          lstDine.setOnItemClickListener(this);
    } catch (Exception e) {
        Toast.makeText(this, "Could not open DB", 
            Toast.LENGTH_LONG).show();
    }
}

// Close the DB when app pauses
    @Override
    protected void onPause() {
        super.onPause();

        dbopener.close();
    }

 }
  public class DBOpener extends SQLiteOpenHelper {

    private static String DB_PATH = 
   "/data/data/com.edu.tp.iit.mns/databases/"; //path of our database
    private static String DB_NAME ="finals"; // Database name
    private final Context myContext;
    private SQLiteDatabase db;



@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}

public DBOpener(Context context) {
    super(context, DB_NAME, null, 1);
    myContext = context;
}

public void createDatabase() throws IOException {
    boolean dbExists = checkDatabase();
    if (dbExists) {
        // Do nothing, DB already exists
        Log.d("DBOpener", "DB exists");
    } else {
        // By calling this method an empty database will be created
            // in the default system path of your application, which we
            // will overwrite with our own database.
        Log.d("DBOpener", "DB does not exit - copying from assets");
        this.getReadableDatabase();
        copyDatabase();
        }
}


private boolean checkDatabase() {
    SQLiteDatabase checkDB = null;
    try {
        // Try opening the database
        String path = DB_PATH + DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(path, null, 
            SQLiteDatabase.OPEN_READONLY);
    } catch (SQLiteException e) {
        // If it fails, DB does not exist
    }
    if (checkDB != null)
        checkDB.close(); // Close the DB; we don’t need it now
    return checkDB != null;
}

private void copyDatabase() throws IOException {
    InputStream istream = myContext.getAssets().open(DB_NAME);
    OutputStream ostream = new FileOutputStream(DB_PATH + DB_NAME);
    // Transfer bytes from istream to ostream
    byte[] buffer = new byte[1024];
    int length;
    while ((length = istream.read(buffer)) > 0) {
        ostream.write(buffer, 0, length);
    }
    // Close streams
    istream.close();
    ostream.flush();
    ostream.close();
}

public void openDatabase() throws SQLiteException {
    db = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, 
        SQLiteDatabase.OPEN_READWRITE);
}

@Override
public synchronized void close() {
    if (db != null)
        db.close();
    super.close();
}

// Retrieve all subject codes
public Cursor getDinnerNames() {
    if (db == null)
        return null;
    return db.query("dinner", new String[] {"name"},
        null, null, null, null, null);
}


// Get details of specific subject
public Cursor getDinnerDetails(String name) {
    if (db == null)
        return null;
    return db.query("dinner", new String[] {"name", "nutrition", "rating"},
        "name = ?", new String[] {name}, null, null, null);
}

// Retrieve all subject codes
public Cursor getLunchNames() {
    if (db == null)
        return null;
    return db.query("lunch", new String[] {"name"},
        null, null, null, null, null);
}

// Get details of specific subject
    public Cursor getLunchDetails(String name) {
        if (db == null)
            return null;
        return db.query("dinner", new String[] {"name", "nutrition", "rating"},
            "name = ?", new String[] {name}, null, null, null);
    }

    // Retrieve all subject codes
    public Cursor getBreakfastNames() {
        if (db == null)
            return null;
        return db.query("breakfast", new String[] {"name"},
            null, null, null, null, null);
    }

    // Get details of specific subject
    public Cursor getBreakfastDetails(String name) {
        if (db == null)
            return null;
        return db.query("breakfast", new String[] {"name", "nutrition", "rating"},
            "name = ?", new String[] {name}, null, null, null);
    }
   }