1

(这是我的lunch.class,它从数据库中填充列表视图。告诉我是否有任何错误。我对此仍然很陌生。)

 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;
    }

}

(这是 display.class(图 2)像模板一样显示动态信息,如图像、食物名称、食物描述及其评级。

  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();
    }

 }

最后是我的 dpopener 文件:

  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);
    }
   }

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

4

1 回答 1

0

要通过意图将参数传递给新活动,您可以使用 putExtra(),就像您在代码中放置的那样:newActivity.putExtra("1", "2");

第一个参数应该是一个字符串常量来标识你的参数,稍后你将使用这个字符串来获取值。第二个参数是值,android 有所有原语的方法。

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

于 2012-05-31T17:41:57.627 回答