【问题标题】:unable to show my save data in the next xml page using intent无法使用意图在下一个 xml 页面中显示我的保存数据
【发布时间】:2012-01-25 07:00:54
【问题描述】:

我能够将我的数据保存在数据库中,但无法显示我保存在下一个 xml 页面中的数据。希望大家能帮帮我。

下面是我的代码:

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enter your name below:" 
/>

<EditText
android:id="@+id/nameText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enter your langtitude below:" 
/>

<EditText
android:id="@+id/langText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enter your longtitude below:" 
/>

<EditText
android:id="@+id/longText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

<Button
android:id="@+id/saveButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save" 
/>

解决方案.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/list">
</ListView>

DataAdapter.java

package com.mp.Testing;

import java.io.IOException;

import com.mp.Testing.DataAdapter;
import com.mp.Testing.DataListActivity;

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

public class DataAdapter 
{
// Name of the database
private static final String DATABASE_NAME = "information";

// Names of the Tables in Database
public static final String DATABASE_TABLE_1 = "pictures";
public static final String DATABASE_TABLE_2 = "data";

// Version of the database
private static final int DATABASE_VERSION = 1;

// Columns present in DATABASE_TABLE
public static final String PICTURES_ROWID = "_id";
public static final String PICTURES_FILE = "pictures_file";
public static final String DATA_NAME = "_name";
public static final String DATA_LANGTITUDE = "pictures_langtitude";
public static final String DATA_LONGTITUDE = "pictures_longtitude";

// Help to create & manage the SQLiteDatabase
private DataDBHelper DbHelper;

// CRUD on SQLiteDatabase
private SQLiteDatabase database;

// SQL query string for creating DATABASE_TABLE_1
static final String CREATE_DATABASE_TABLE_1 =
             "create table " + DATABASE_TABLE_1 + " (" + PICTURES_ROWID +
             " integer primary key autoincrement, " + PICTURES_FILE +
             " text not null);";

// SQL query string for creating DATABASE_TABLE_2
static final String CREATE_DATABASE_TABLE_2 =
             "create table " + DATABASE_TABLE_2 + " (" + DATA_NAME +
             " integer primary key autoincrement, " + DATA_LANGTITUDE +
             " text not null, " + DATA_LONGTITUDE + " text not null);";

// Context object associated with the SQLite database object
private final Context Ctx;

// Constructor
public DataAdapter(Context ctx) 
{
    this.Ctx = ctx;
}

// Open database connection
public DataAdapter open() throws android.database.SQLException 
{
    DbHelper = new DataDBHelper(Ctx);
    database = DbHelper.getWritableDatabase();
    return this;
}

// Close database connection
public void close() 
{
    DbHelper.close();
}

// Create the database_1 & define the values that is being insert
public long createPictures(String file)
{                                            
    ContentValues initialValues = new ContentValues();
    initialValues.put(PICTURES_FILE, file);

    return database.insert(DATABASE_TABLE_1, null, initialValues); 
}

// Create the database_2 & define the values that is being insert
public long createData(String lan, String lon)
{                                            
    ContentValues initialValues = new ContentValues();
    initialValues.put(DATA_LANGTITUDE, lan);
    initialValues.put(DATA_LONGTITUDE, lon);

    return database.insert(DATABASE_TABLE_2, null, initialValues); 
}

// Delete the ID in the database_1
public boolean deletePictures(long picsId) 
{                               
    return database.delete(DATABASE_TABLE_1, PICTURES_ROWID + "=" + picsId, null) > 0;        
}

// Delete the ID in the database_2
public boolean deleteData(long dataId) 
{                               
    return database.delete(DATABASE_TABLE_2, DATA_NAME + "=" + dataId, null) > 0;        
}

// Find all the data of database_1 from the system
public Cursor fetchAllPictures() 
{                                       
    return database.query(DATABASE_TABLE_1, new String[] {PICTURES_ROWID, PICTURES_FILE}, null, null, null, null, null);
}

// Find all the data of database_2 from the system
public Cursor fetchAllData() 
{                                       
    return database.query(DATABASE_TABLE_2, new String[] {DATA_NAME, DATA_LANGTITUDE, DATA_LONGTITUDE}, null, null, null, null, null);
}

// Fetch Pictures according to ID
public Cursor fetchPictures(long picsId) throws SQLException 
{             
    Cursor dCursor =
    database.query(true, DATABASE_TABLE_1, new String[] {PICTURES_ROWID,
    PICTURES_FILE}, PICTURES_ROWID + "=" +
    picsId, null, null, null, null, null);    

    // Go to the first record
    if (dCursor != null) 
    {
        dCursor.moveToFirst();                                            
    }
    return dCursor;
}

// Fetch Data according to ID
public Cursor fetchData(long dataId) throws SQLException 
{             
    Cursor dCursor =
    database.query(true, DATABASE_TABLE_2, new String[] {DATA_NAME,
    DATA_LANGTITUDE, DATA_LONGTITUDE}, DATA_NAME + "=" +
    dataId, null, null, null, null, null);    

    // Go to the first record
    if (dCursor != null) 
    {
        dCursor.moveToFirst();                                            
    }
    return dCursor;
}

// Update the database_1
public boolean updatePictures(long picsId, String file) 
{                                            
    ContentValues args = new ContentValues();                             
    args.put(PICTURES_FILE, file);

    return database.update(DATABASE_TABLE_1, args, PICTURES_ROWID + "=" + picsId, null) > 0;    
}

// Update the database_2
public boolean updateData(long dataId, String lan, String lon) 
{                                            
    ContentValues args = new ContentValues();                             
    args.put(DATA_LANGTITUDE, lan);
    args.put(DATA_LONGTITUDE, lon);

    return database.update(DATABASE_TABLE_2, args, DATA_NAME + "=" + dataId, null) > 0;    
}
}

DataListActivity.java

package com.mp.Testing;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.app.ListActivity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class DataListActivity extends ListActivity 
{
private static final int ACTIVITY_CREATE=0;
private static final int ACTIVITY_EDIT=1;

// Define the variables
private DataAdapter DbHelper;  

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.solution);

    DbHelper = new DataAdapter(this);
    DbHelper.open();
    fillData();                                                           
    registerForContextMenu(getListView());
}

// Fill the data in the database
private void fillPictures() 
{
    Cursor dbCursor = DbHelper.fetchAllData();               
    startManagingCursor(dbCursor);                                 

    // Creating an array to specify the fields we want 
    String[] dat = new String[]{DataAdapter.PICTURES_FILE};  

    // An array of the fields we want to bind in the view
    int[] dato = new int[]{R.id.nameText};                                     

    // Create a simple cursor adapter & display it
    SimpleCursorAdapter reminders = new SimpleCursorAdapter(this, R.layout.solution, dbCursor, dat, dato);                           
    setListAdapter(reminders);                                            
 }

// Fill the data in the database
private void fillData() 
{
    Cursor dbCursor = DbHelper.fetchAllData();               
    startManagingCursor(dbCursor);                                 

    // Creating an array to specify the fields we want 
    String[] lan = new String[]{DataAdapter.DATA_LANGTITUDE};  
    String[] lon = new String[]{DataAdapter.DATA_LONGTITUDE}; 

    // An array of the fields we want to bind in the view
    int[] lanto = new int[]{R.id.langText};  
    int[] lonto = new int[]{R.id.longText};

    // Create a simple cursor adapter & display it
    SimpleCursorAdapter landers = new SimpleCursorAdapter(this, R.layout.solution, dbCursor, lan, lanto);                           
    setListAdapter(landers); 

    // Create a simple cursor adapter & display it
    SimpleCursorAdapter londers = new SimpleCursorAdapter(this, R.layout.solution, dbCursor, lon, lonto);                           
    setListAdapter(londers);
 }

@Override
protected void onListItemClick(ListView l, View v, int position, long id) 
{
    super.onListItemClick(l, v, position, id);
    Intent i = new Intent(this, DataEditActivity.class);
    i.putExtra(DataAdapter.PICTURES_ROWID, id);
    i.putExtra(DataAdapter.DATA_NAME, id);
    startActivityForResult(i, ACTIVITY_EDIT);
 }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) 
{
    super.onActivityResult(requestCode, resultCode, intent);
    fillData();                                                           
 }

@Override
public boolean onContextItemSelected(MenuItem item) 
{                     
    switch(item.getItemId()) 

    {
        case R.id.list:
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();    
        DbHelper.deleteData(info.id);                            
        fillData();                                                   
        return true;
    }
    return super.onContextItemSelected(item);
}
}

DataEditActivity.java

package com.mp.Testing;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class DataEditActivity extends Activity implements OnClickListener
{
private DataAdapter DbHelper;
private Long mPicsId;
private Long mDataId;
private EditText ET;
private EditText LAT;
private EditText LOT;
private Button SB;

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

    DbHelper = new DataAdapter(this);

    ET = (EditText) findViewById(R.id.nameText);
    LAT = (EditText) findViewById(R.id.langText);
    LOT = (EditText) findViewById(R.id.longText);
    SB = (Button) findViewById(R.id.saveButton);

    mPicsId = savedInstanceState != null                                  
    ? savedInstanceState.getLong(DataAdapter.PICTURES_ROWID): null;
    mDataId = savedInstanceState != null                                  
    ? savedInstanceState.getLong(DataAdapter.DATA_NAME): null;
    registerButtonListenersAndSetDefaultText();
}

private void registerButtonListenersAndSetDefaultText() 
{
    // TODO Auto-generated method stub
    SB.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View view) 
        {
        saveState();                                                
            setResult(RESULT_OK);                                       
            Toast.makeText(DataEditActivity.this,                   
            getString(R.string.message),
            Toast.LENGTH_SHORT).show();
            finish();          
         }
    });
}

// Intent to start the activity
private void setRowIdFromIntent() 
{                                      
    if (mPicsId == null) 
    {
        Bundle extras = getIntent().getExtras();
        mPicsId = extras != null
        ? extras.getLong(DataAdapter.PICTURES_ROWID): null;
   }
   if (mDataId == null) 
   {
        Bundle extras = getIntent().getExtras();
        mDataId = extras != null
        ? extras.getLong(DataAdapter.DATA_NAME): null;
   }
}

// Database is close when it is pause
@Override
protected void onPause() 
{
    super.onPause();
    DbHelper.close();                                                    
}

// Resume the database
@Override
protected void onResume() 
{                                                
    super.onResume();
    DbHelper.open();                                                     
    setRowIdFromIntent();                                                 
    populateFields();                                                     
}

// Populate the form
private void populateFields()  
{                                          
    if (mPicsId != null) 
    {
        Cursor pics = DbHelper.fetchData(mPicsId);                
        startManagingCursor(pics);            

        ET.setText(pics.getString(
        pics.getColumnIndexOrThrow(DataAdapter.PICTURES_FILE)));       
    }
    if (mDataId != null) 
    {
        Cursor data = DbHelper.fetchData(mDataId);                
        startManagingCursor(data);            

        LAT.setText(data.getString(
        data.getColumnIndexOrThrow(DataAdapter.DATA_LANGTITUDE)));  
        LOT.setText(data.getString(
        data.getColumnIndexOrThrow(DataAdapter.DATA_LONGTITUDE))); 
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) 
{
    super.onSaveInstanceState(outState);
    outState.putLong(DataAdapter.PICTURES_ROWID, mPicsId); 
    outState.putLong(DataAdapter.DATA_NAME, mDataId); 
}

private void saveState() 
{
    String file = ET.getText().toString();
    String lan = LAT.getText().toString();
    String lon = LOT.getText().toString();

    if (mPicsId == null && mDataId == null) 
    {                                                 
        long id = DbHelper.createPictures(file);
        long ild = DbHelper.createData(lan, lon);

        if (id > 0 && ild > 0) 
        {                                                     
            mPicsId = id;  
            mDataId = ild;
        }
    } 
    else 
    {
        DbHelper.updatePictures(mPicsId, file);  
        DbHelper.updateData(mDataId, lan, lon);
    }
}

public void onClick(View v) 
{
    Intent i = new Intent(DataEditActivity.this, Shown.class);
    startActivity(i);
}
}

DataDBHelper.java

package com.mp.Testing;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

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

public class DataDBHelper extends SQLiteOpenHelper
{
// Name & the version of Database.
public static final String DATABASE_NAME = "information";
public static final int DATABASE_VERSION = 1;

// Names of the Tables in Database
public static final String DATABASE_TABLE_1 = "pictures";
public static final String DATABASE_TABLE_2 = "data";

// Columns present in DATABASE_TABLE
public static final String PICTURES_ROWID = "_id";
public static final String PICTURES_FILE = "pictures_file";
public static final String DATA_NAME = "_name";
public static final String DATA_LANGTITUDE = "pictures_langtitude";
public static final String DATA_LONGTITUDE = "pictures_longtitude";

// SQL query string for creating DATABASE_TABLE_1
static final String CREATE_DATABASE_TABLE_1 =
             "create table " + DATABASE_TABLE_1 + " (" + PICTURES_ROWID +
             " integer primary key autoincrement, " + PICTURES_FILE +
             " text not null);";

// SQL query string for creating DATABASE_TABLE_2
static final String CREATE_DATABASE_TABLE_2 =
             "create table " + DATABASE_TABLE_2 + " (" + DATA_NAME +
             " integer primary key autoincrement, " + DATA_LANGTITUDE +
             " text not null, " + DATA_LONGTITUDE + " text not null);";

// To execute the SQL command
@Override
public void onCreate(SQLiteDatabase database) 
{
    database.execSQL(CREATE_DATABASE_TABLE_1);
    database.execSQL(CREATE_DATABASE_TABLE_2);
    Log.d("SaveData", "Created DB");
}

public static final String TAG_1 = "PICTURES_TABLE";
public static final String TAG_2 = "DATA_TABLE";

private Context context;

// Constructor
public DataDBHelper(Context context) 
{
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.context = context;
}

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

// Inserting pictures into database
private void insertDataIntoPictures(SQLiteDatabase db) 
{
    try
    {
        InputStream is = context.getResources().openRawResource(R.raw.picture);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String strLine = null;

        while ((strLine = (br.readLine()).trim()) != null) 
        {
            String[] temp = null;

            ContentValues initialValues = new ContentValues();

            initialValues.put(PICTURES_FILE, temp[0].trim());

            db.insert(DATABASE_TABLE_1, null, initialValues);
        }
    is.close();
    }   
    catch (Exception e)
    {
        Log.d(TAG_1, "Error while inserting common names into table");
    }
}

// Inserting data into database
private void insertDataIntoData(SQLiteDatabase db) 
{
    try
    {
        InputStream is = context.getResources().openRawResource(R.raw.data); 
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String strLine = null;

        while ((strLine = (br.readLine()).trim()) != null) 
        {
            String[] temp = null;

            ContentValues initialValues = new ContentValues();

            initialValues.put(DATA_LANGTITUDE, temp[0]);
            initialValues.put(DATA_LONGTITUDE, temp[1]);

            db.insert(DATABASE_TABLE_2, null, initialValues);
        }
    is.close();
    }   
    catch (Exception e)
    {
        Log.d(TAG_2, "Error while inserting common names into table");
    }
}
}

Shown.java

package com.mp.Testing;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

public class Shown extends Activity
{
long PICTURES_ROWID;
String PICTURES_FILE;
String DATA_NAME;
String DATA_LANGTITUDE;
String DATA_LONGTITUDE;

public static ListView lv;

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

Bundle extras = getIntent().getExtras();

PICTURES_ROWID = extras.getLong(DataAdapter.PICTURES_ROWID);
PICTURES_FILE = extras.getString(DataAdapter.PICTURES_FILE);
DATA_NAME = extras.getString(DataAdapter.DATA_NAME);
DATA_LANGTITUDE = extras.getString(DataAdapter.DATA_LANGTITUDE);
DATA_LONGTITUDE = extras.getString(DataAdapter.DATA_LONGTITUDE);

lv = (ListView)findViewById(R.id.list);
}
}

我希望将我保存在 main.xml 中的数据显示在 solution.xml 中。

谢谢!

【问题讨论】:

  • 你试过什么?有什么错误?你认为发生了什么?来吧...
  • 提供有关您的问题的完整详细信息很好。但你的问题也应该突出你面临问题的部分。
  • 您好,感谢您对我的帮助。我认为问题在于我的 DataListActivity。不知道我的编码出现什么问题,无法在 solution.xml 中显示保存数据

标签: android database eclipse sqlite android-intent


【解决方案1】:

您需要定义一个ListAdapter 来告诉Android 要将什么呈现到您的列表中。 (至少如果您不是从数组创建它。)

有关如何使用 ListView 的非常简单的示例,请查看:http://developer.android.com/resources/tutorials/views/hello-listview.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-03
    • 2021-12-17
    • 2020-07-07
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    相关资源
    最近更新 更多