android 如何在android中将数据保存和显示到两个不同的活动中 [英] android How to save and display data into two different activity in android

查看:27
本文介绍了android 如何在android中将数据保存和显示到两个不同的活动中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一个带有大学列表的 android 项目,点击此列表会显示大学详细信息.

I am doing an android project with a list of college and onClicking to this list displays the college details.

截图如下:

在工具栏上学校详细信息的右上端,我设置了一个看起来像星星的小图标.单击该图标后,该图标将更改为填充图标,并且该学校的名称将被刮到表格中的书签班级列表.现在我也希望存储详细信息.我的意思是单击我想要存储的书签列表项显示与 SchoolDetails 类相同的详细信息.我在徘徊如何使用 sqlite 数据库来执行此操作.请给我一些有关如何执行此操作的指导.

At the right top end of schools detail on the toolbar,I have set a small star looking icon.On clicking to that icon the icons gets changed to filled icon and the name of that school is shaved to bookmark class in the form of list.Now I wish to store the details tooo.I mean On clicking to that bookmarked list item I want to store & display the details too same as SchoolDetails class.I am wandering how can I do so using sqlite database.Please give me some direction on how can I do that.

这是我的书签类

public class Bookmark extends AppCompatActivity {
    private List<Bookmarkitem> ourBookmarkListItems = new ArrayList<Bookmarkitem>();
    private ListView listView;
    private BookmarkAdapter adapter;
    DatabaseHelper dbhelper;
    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bookmark);
        dbhelper = new DatabaseHelper(this);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        toolbar.setPadding(0, getStatusBarHeight(), 0, 0);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("Bookmark");

        List<Bookmarkitem> bookmarkedSchools = dbhelper.getAllSchoolBookmark();

        listView = (ListView) findViewById(R.id.list_bookmarked);
        if (bookmarkedSchools.size() != 0) {
            adapter = new BookmarkAdapter(this, bookmarkedSchools);
            listView.setAdapter(adapter);
        } else {
            Toast.makeText(this, "You have no bookmark yet.", Toast.LENGTH_SHORT).show();
        }

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Intent i = new Intent(Bookmark.this, SchoolDetails.class);

                startActivity(i);

            }
        });


    }

这是我的数据库类,现在只存储学校的名称、徽标和地址.

and this is my database class that now just stores the name,logo and address of school.

      package com.example.user.educationhunt.database;

import android.accessibilityservice.GestureDescription;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.view.MenuItem;

import com.example.user.educationhunt.listner.DatabaseUpdatedListener;
import com.example.user.educationhunt.pojos.Bookmarkitem;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by user on 11/22/2016.
 */
public class DatabaseHelper extends SQLiteOpenHelper {

    public DatabaseUpdatedListener databaseUpdatedListener;
    static final String DATABASE_NAME = "BookmarkDatabase";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_NAME_BOOKMARK = "bookmark";

    //    Contact table columns name
    private static final String ID = "Id";
    private static final String SID = "SId";
    private static final String NAME = "Name";
    private static final String LOGO = "Logo";
    private static final String LOCATION = "Location";

    String createTableBookmark = "Create table if not exists `Bookmark` ("
            + "`name`   TEXT," + "`location`    TEXT," + "`logo`    TEXT);";

    String CREATE_SCHOOL_BOOKMARK_TABLE = "CREATE TABLE " + TABLE_NAME_BOOKMARK + "("
            + ID + " INTEGER PRIMARY KEY, "
            + SID + " INTEGER, "
            + NAME + " TEXT, "
            + LOGO + " TEXT, "
            + LOCATION + " TEXT " + ")";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public void insertBookmarkData(Bookmarkitem bookmarkitem) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues content = new ContentValues();
        content.put("name", bookmarkitem.name);
        content.put("location", bookmarkitem.address);
        content.put("logo", bookmarkitem.logo);

        db.insert("Bookmark", null, content);
    }

    public ArrayList<Bookmarkitem> getBookmarkist() {
        String sql = "select * from Bookmark ";
        ArrayList<Bookmarkitem> bookmarklist = new ArrayList<Bookmarkitem>();

        Cursor c = getWritableDatabase().rawQuery(sql, null);
        while (c.moveToNext()) {
            Bookmarkitem info = new Bookmarkitem();
            info.name = c.getString(c.getColumnIndex("name"));
            info.address = c.getString(c.getColumnIndex("location"));
            info.logo = c.getString(c.getColumnIndex("logo"));
            bookmarklist.add(info);
        }
        c.close();
        return bookmarklist;
    }

    public Bookmarkitem getBookmarkData(String bookmarkName) {
        String sql = "select * from Bookmark  where id='" + bookmarkName + "'";

        Cursor c = getWritableDatabase().rawQuery(sql, null);
        while (c.moveToNext()) {
            Bookmarkitem info = new Bookmarkitem();
            info.name = c.getString(c.getColumnIndex("name"));
            info.address = c.getString(c.getColumnIndex("location"));
            info.logo = c.getString(c.getColumnIndex("logo"));
        }
        c.close();
        Bookmarkitem info = null;
        return info;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        // TODO Auto-generated method stub
        sqLiteDatabase.execSQL(CREATE_SCHOOL_BOOKMARK_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int arg1, int arg2) {
        // TODO Auto-generated method stub
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME_BOOKMARK);
        onCreate(sqLiteDatabase);
    }

    public void addSchoolBookmark(Bookmarkitem bookmarkitem, MenuItem menuItem) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(SID, bookmarkitem.getBookmarkID());
        values.put(NAME, bookmarkitem.getName());
        values.put(LOGO, bookmarkitem.getLogo());
        values.put(LOCATION, bookmarkitem.getAddress());

        //inserting row
        if (db.insert(TABLE_NAME_BOOKMARK, null, values) != -1) {
            databaseUpdatedListener.setDatabaseSuccess(bookmarkitem.getName(), menuItem);
        } else {
            databaseUpdatedListener.setDatabaseError("Failed to insert");
        }
        db.close();
    }

    public List<Bookmarkitem> getAllSchoolBookmark() {
        SQLiteDatabase db = this.getWritableDatabase();
        String selectQuery = "SELECT * FROM " + TABLE_NAME_BOOKMARK;
        List<Bookmarkitem> bookmarkitems = new ArrayList<>();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                Bookmarkitem bookmarkitem = new Bookmarkitem();
                bookmarkitem.setBookmarkID(Integer.parseInt(cursor.getString(0)));
                bookmarkitem.setName(cursor.getString(1));
                bookmarkitem.setLogo(cursor.getString(2));
                bookmarkitem.setAddress(cursor.getString(3));
                bookmarkitems.add(bookmarkitem);
            } while (cursor.moveToNext());
        }
        return bookmarkitems;
    }

    public void removeBookmarkItem(int sID) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("DELETE FROM " + TABLE_NAME_BOOKMARK + " WHERE " + SID+ "= '" + sID+ "'");
        db.close();


    }
}

这是我的 SchoolDetails 类

This is my SchoolDetails class

package com.example.user.educationhunt;

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

import com.example.user.educationhunt.database.DatabaseHelper;
import com.example.user.educationhunt.fragment.About;
import com.example.user.educationhunt.fragment.Admission;
import com.example.user.educationhunt.fragment.FeeStructure;
import com.example.user.educationhunt.listner.DatabaseUpdatedListener;
import com.example.user.educationhunt.pojos.Bookmarkitem;
import com.example.user.educationhunt.pojos.OurSchool;

import java.util.ArrayList;
import java.util.List;

public class SchoolDetails extends AppCompatActivity implements DatabaseUpdatedListener {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    Boolean isStarFilled = false;
    DatabaseHelper db;
    OurSchool ourSchool;
    private Menu menu;


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

        ourSchool = (OurSchool) getIntent().getSerializableExtra("school");

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle(ourSchool.getSchoolName());


        db = new DatabaseHelper(this);
        db.databaseUpdatedListener = this;

        Toast.makeText(this, ourSchool.getSchoolName(), Toast.LENGTH_SHORT).show();

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.fav_school, menu);
        this.menu = menu;
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.star_School:
                Bookmarkitem bookmarkitem = new Bookmarkitem();
                bookmarkitem.setBookmarkID(ourSchool.getSchoolId());
                bookmarkitem.setName(ourSchool.getSchoolName());
                bookmarkitem.setLogo(ourSchool.getSchoolLogo());
                bookmarkitem.setAddress(ourSchool.getSchoolAddress());
                db.addSchoolBookmark(bookmarkitem, item);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        List<Bookmarkitem> bookmarkitems = db.getAllSchoolBookmark();
        if (bookmarkitems.size() != 0) {
            for (Bookmarkitem bookmarkitem : bookmarkitems) {
                if (bookmarkitem.getBookmarkID() == ourSchool.getSchoolId()) {
                    isStarFilled = true;
                    break;
                }
                else isStarFilled=false;
            }
            if (isStarFilled) {
                menu.getItem(0).setIcon(getResources().getDrawable(R.mipmap.starfilled));
            }else if (isStarFilled.booleanValue()==true){
                delete();
                menu.getItem(0).setIcon(getResources().getDrawable(R.mipmap.star));
            }
        }
        return true;
    }

    public void delete(){
        List<Bookmarkitem> bookmarkitems = db.getAllSchoolBookmark();
        db.removeBookmarkItem(ourSchool.getSchoolId());    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new About(), "ABOUT US");
        adapter.addFragment(new Admission(), "ADMISSION");
        adapter.addFragment(new FeeStructure(), "FEE");
        viewPager.setAdapter(adapter);
    }


    @Override
    public void setDatabaseSuccess(String schoolName, MenuItem item) {
        Toast.makeText(this, schoolName + "successfully added as bookmark", Toast.LENGTH_SHORT).show();
        item.setIcon(R.mipmap.starfilled);
    }

    @Override
    public void setDatabaseError(String failureMessage) {
        Toast.makeText(this, failureMessage, Toast.LENGTH_SHORT).show();
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

欢迎任何建议

推荐答案

private static final int ID = "Id";
private static final int SID = "SId";
private static final String NAME = "Name";
private static final String LOGO = "Logo";
private static final String LOCATION = "Location";

更改创建表代码:

  String CREATE_SCHOOL_BOOKMARK_TABLE = "CREATE TABLE " + TABLE_NAME_BOOKMARK + "("
                + ID + " INTEGER PRIMARY KEY, "
                + SID + " INTEGER, "
                + NAME + " TEXT, "
                + LOGO + " TEXT, "
                + LOCATION + " TEXT " + ")";

也改变这个:

public void addSchoolBookmark(Bookmarkitem bookmarkitem, MenuItem menuItem) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(SID, bookmarkitem.getBookmarkID());
        values.put(NAME, bookmarkitem.getName());
        values.put(LOGO, bookmarkitem.getLogo());
        values.put(LOCATION, bookmarkitem.getAddress());

        //inserting row
        if (db.insert(TABLE_NAME_BOOKMARK, null, values) != -1) {
            databaseUpdatedListener.setDatabaseSuccess(bookmarkitem.getName(), menuItem);
        } else {
            databaseUpdatedListener.setDatabaseError("Failed to insert");
        }
        db.close();
    }

SCHOOL 类中的第一个 create 方法从书签表中删除条目:

first create method in SCHOOL class to remove entry from bookmark table:

            db.removeBookmarkItem(ourSchool.getSchoolId(), item);

现在,在数据库类中:实现上面的方法来删除记录:

Now, in database class: implement above method to delete record:

public void removeBookmarkItem(int sID) {
    SQLiteDatabase db = this.getWritableDatabase();



   database.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + SID+ "= '" + sID+ "'");
db.close();


}

在这两种情况下都使用相同的方法,您需要检查项目是否已被添加书签,然后将该 id 发送到 remove 方法并删除您的数据

Same method is used in both cases, you need to check if item is already bookmarked then send that id to remove method and your data is removed

这篇关于android 如何在android中将数据保存和显示到两个不同的活动中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆