来自SQLite的显示和打印元素

时间:2016-04-10 23:12:40

标签: android android-studio

我被困在一个应用程序中,我需要你的建议。

我希望第一页能够使用inainte(前面)和inapoi(后面)按钮从数据库中运行项目,但我尝试在OnClick Lisiner中订购数据库,但是应用程序崩溃,并且不知道为什么,我认为我不会在数据库中正确地上传这些项目。

你觉得我应该做些什么,或者我该怎样做才能运行元素。

再次问题是我没有在任何地方找到它,我该怎么做打印按钮,从显示的屏幕元素发送打印信息。

我编写的绝大多数代码都是在教程的帮助下完成的。 所以,这是我创建的代码和文件:

activity_main.xml中:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity"
 android:orientation="vertical">


  <ImageView
    android:id="@+id/ivImagineaRetetei"
    android:layout_alignParentStart="true"
    android:layout_alignParentEnd="true"
    android:layout_above="@+id/INAPOI"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/numeleRetetei" />

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Carrefour Suceava"
    android:id="@+id/textView2"
     />

 <TextView
    android:layout_width="290dp"
    android:layout_height="match_parent"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Numele Retetei"
    android:id="@+id/numeleRetetei"
    android:layout_alignTop="@+id/PPR"
    android:layout_alignParentStart="true"
    android:layout_alignBottom="@+id/PPR" />

 <Button
    android:layout_width="99dp"
    android:layout_height="wrap_content"
    android:text="Adauga"
    android:id="@+id/ADD"
    android:layout_gravity="right"
    android:layout_alignParentTop="true"
    android:layout_alignStart="@+id/PPR" />

 <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Printeaza"
    android:id="@+id/PPR"
    android:layout_marginTop="28dp"
    android:layout_gravity="right"
    android:layout_below="@+id/textView2"
    android:layout_alignEnd="@+id/INAINTE" />

 <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Inapoi"
    android:id="@+id/INAPOI"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true" />

 <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Inainte"
    android:id="@+id/INAINTE"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true" />

 </RelativeLayout>

Activity_main2.xml

  <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

 <TabHost
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tabHost">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </TabWidget>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:id="@+id/tabContactList"
                android:layout_width="match_parent"
                android:layout_height="458dp"
                android:orientation="vertical">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="Retetele mele"
                    android:id="@+id/textView"
                    android:layout_gravity="center"
                    android:layout_marginTop="10dp" />

                <ListView
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:id="@+id/listView"
                    android:layout_gravity="center" />

            </LinearLayout>

            <LinearLayout
                android:id="@+id/tabCreator"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="Adauga Reteta"
                    android:id="@+id/lblCreatorTitle"
                    android:layout_gravity="center"
                    android:layout_marginTop="10dp" />

                <ImageView
                    android:layout_width="100dp"
                    android:layout_height="100dp"
                    android:id="@+id/imgViewContactImage"
                    android:layout_gravity="center"
                    android:layout_marginTop="10dp"
                    android:src="@drawable/index" />

                <EditText
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:inputType="textPersonName"
                    android:ems="10"
                    android:id="@+id/txtName"
                    android:phoneNumber="false"
                    android:layout_marginTop="15dp"
                    android:hint="Numele Retetei" />

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Adaugare"
                    android:id="@+id/btnAdd"
                    android:layout_marginTop="10dp"
                    android:enabled="false" />

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Inapoi"
                    android:id="@+id/btnRET"
                    android:layout_marginTop="10dp"
                    android:enabled="true" />

               </LinearLayout>

            </FrameLayout>
        </LinearLayout>
     </TabHost>

 </LinearLayout>

Contact.java

 package ciprian.retete_carrefour;

 import android.net.Uri;


 public class Contact {

   private String _name;
   private  Uri _imageURI;
   private  int _id;

   public Contact(int id, String name, Uri imageURI){

        _id = id;
        _name = name;
        _imageURI = imageURI;

  }
     public int getId()         {        return _id;          }

     public String getName()    {        return _name;        }

     public Uri getImageURI()   {        return _imageURI;    }

 }

DatabaseHandler.java

package ciprian.retete_carrefour;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;

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


public class DatabaseHandler extends SQLiteOpenHelper {

   private static final int DATABASE_VERSION =1;

    private static final String DATABASE_NAME = "contactManager",
      TABLE_CONTACTS = "contacts",
      KEY_ID = "id",
      KEY_NAME = "name",
      KEY_IMAGEURI = "imageUri";


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



  @Override
  public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "( " + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME + " TEXT," + KEY_IMAGEURI + " TEXT )");


   }

   @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

    onCreate(db);
  }

 //CREARE DE USER

 public void createContact (Contact contact)
 {
   SQLiteDatabase db = getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName());
    values.put(KEY_IMAGEURI, contact.getImageURI().toString());

    db.insert(TABLE_CONTACTS, null, values);
    db.close();

  }

  //CITIRE BAZA DE DATE

  public Contact getContact(int id)
  {
      SQLiteDatabase db = getReadableDatabase();

      Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, KEY_NAME, KEY_IMAGEURI}, KEY_ID + "=?", new String[] {String.valueOf(id)}, null, null, null, null);

    if (cursor != null)
            cursor.moveToFirst();


    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),cursor.getString(1), Uri.parse(cursor.getString(2)));
    db.close();
    cursor.close();
    return contact;

  }

//STERGERE CONTACT DIN DB

   public void deleteContact(Contact contact)    {
      SQLiteDatabase db = getWritableDatabase();
      db.delete(TABLE_CONTACTS, KEY_ID + "=?", new String[] {String.valueOf(contact.getId())});
    db.close();
}


  public int getContactsCount()    {
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS, null);
    int count = cursor.getCount();
    db.close();
    cursor.close();
    return count;

 }


 public int updateContact(Contact contact)    {
    SQLiteDatabase db = getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName());
    values.put(KEY_IMAGEURI, contact.getImageURI().toString());

    int rowsAffected = db.update(TABLE_CONTACTS, values, KEY_ID + "=?", new String[]{String.valueOf(contact.getId())});
    db.close();
    return rowsAffected;

  }

public List<Contact> getAllContacts()    {
    List<Contact> contacts = new ArrayList<Contact>();

    SQLiteDatabase db = getWritableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CONTACTS, null);

    if (cursor.moveToFirst())        {

        do {
              contacts.add(new Contact(Integer.parseInt(cursor.getString(0)),cursor.getString(1), Uri.parse(cursor.getString(2))));
        }
        while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    return contacts;
   }

}

Main2Activity.java

package ciprian.retete_carrefour;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

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

public class Main2Activity extends Activity {

  private static final int DELETE=1;


  EditText nameTxt;
  ImageView contactImageImgView;
  List<Contact> Contacts = new ArrayList<Contact>();
  ListView contactListView;
  Uri imageUri = Uri.parse("android.resource://ciprian.retete_carrefour/drawable/index.jpg");
  DatabaseHandler dbHandler;
  int longClickedItemIndex;
  ArrayAdapter<Contact> contactAdapter;



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

    nameTxt = (EditText) findViewById(R.id.txtName);
    TabHost tabHost = (TabHost) findViewById(R.id.tabHost);
    contactListView = (ListView) findViewById(R.id.listView);
    contactImageImgView = (ImageView)findViewById(R.id.imgViewContactImage);
    dbHandler = new DatabaseHandler(getApplicationContext());

    registerForContextMenu(contactListView);
    contactListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            longClickedItemIndex = position;
            return false;
        }
    });

    tabHost.setup();
    TabHost.TabSpec tabSpec = tabHost.newTabSpec("creator");
    tabSpec.setContent(R.id.tabCreator);
    tabSpec.setIndicator("Adaugare");
    tabHost.addTab(tabSpec);


    tabSpec = tabHost.newTabSpec("list");
    tabSpec.setContent(R.id.tabContactList);
    tabSpec.setIndicator("Memorate");
    tabHost.addTab(tabSpec);


    final Button retBtn = (Button) findViewById(R.id.btnRET);
    final Button addBtn = (Button) findViewById(R.id.btnAdd);
    addBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Contact contact = new Contact(dbHandler.getContactsCount(), String.valueOf(nameTxt.getText()), imageUri);
            if (!contactExists(contact)) {
                dbHandler.createContact(contact);
                Contacts.add(contact);
                contactAdapter.notifyDataSetChanged();
                Toast.makeText(getApplicationContext(), String.valueOf(nameTxt.getText()) + " a fost adaugata la retete!", Toast.LENGTH_SHORT).show();
           return;
            }
            Toast.makeText(getApplicationContext(), String.valueOf(nameTxt.getText()) + " exista deja, te rugam alege alta reteta.", Toast.LENGTH_SHORT).show();
        }
    });

    retBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(Main2Activity.this, MainActivity.class));
        }
    });

    nameTxt.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
             addBtn.setEnabled(String.valueOf(nameTxt.getText()).trim().length() > 0);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    contactImageImgView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Selecteaza Imaginea Retetei"), 1);
        }
    });


    if (dbHandler.getContactsCount()!=0)
        Contacts.addAll(dbHandler.getAllContacts());


    populateList();

 }

    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo){
        super.onCreateContextMenu(menu, view, menuInfo);

        menu.setHeaderIcon(R.drawable.pencil_icon);
        menu.setHeaderTitle("Optiuni");
                    menu.add(Menu.NONE, DELETE, menu.NONE, "Sterge");

    }

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

            case DELETE:
                    dbHandler.deleteContact(Contacts.get(longClickedItemIndex));
                    Contacts.remove(longClickedItemIndex);
                    contactAdapter.notifyDataSetChanged();

                break;
        }

        return super.onContextItemSelected(item);
    }


    private boolean contactExists(Contact contact)
    {
        String name = contact.getName();
        int contactCount = Contacts.size();

        for (int    i=0; i <contactCount; i++)
        {
            if (name.compareToIgnoreCase(Contacts.get(i).getName()) == 0)
                return true;
        }

        return false;

    }



    public void onActivityResult (int reqCode, int resCode, Intent data)
    {
        if (resCode == RESULT_OK)
        {
            if (reqCode == 1) {
                imageUri = data.getData();
                contactImageImgView.setImageURI(data.getData());
            }
        }

    }



  private void populateList() {
      contactAdapter = new ContactListAdapter();
      contactListView.setAdapter(contactAdapter);

  }

    private class ContactListAdapter extends ArrayAdapter<Contact>
    {
        public ContactListAdapter()
        {
            super(Main2Activity.this, R.layout.listview_item,Contacts);
        }




         @Override
        public View getView(int position, View view, ViewGroup parent)
         {
             if (view == null)
                 view = getLayoutInflater().inflate(R.layout.listview_item, parent, false);

             Contact currentContact = Contacts.get(position);

             TextView name = (TextView) view.findViewById(R.id.contactName);
             name.setText(currentContact.getName());
             ImageView ivContactImage = (ImageView) view.findViewById(R.id.ivContactImage);
                ivContactImage.setImageURI(currentContact.getImageURI());
             return view;
           }



      }


}

listview_item.xml

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal" android:layout_width="match_parent"
  android:layout_height="wrap_content">

    <ImageView
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:id="@+id/ivContactImage" />

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Numele Retetei"
        android:id="@+id/contactName"
        android:layout_marginTop="20dp" />
    </LinearLayout>

</LinearLayout>

MainActivity.java

   package ciprian.retete_carrefour;

 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;

 import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.ImageView;

 import android.widget.TextView;

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


 public class MainActivity extends Activity {

 //  DatabaseHandler bazaDate;
 //   Button inainte;
 //   List<Contact> Contacts = new ArrayList<Contact>();


    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);



   //    setupInainte();
       setupAdaugaProdus();
  }

 /*   private void setupInainte()
   {
    inainte = (Button)findViewById(R.id.INAINTE);
    inainte.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Contacts = bazaDate.getAllContacts();
            int contactCount = Contacts.size();

            for (int    i=0; i <contactCount; i++)
            {

                Contact currentContact = Contacts.get(i);
                TextView name = (TextView) findViewById(R.id.numeleRetetei);
                name.setText(currentContact.getName());
                ImageView ivContactImage = (ImageView)findViewById(R.id.ivImagineaRetetei);
                ivContactImage.setImageURI(currentContact.getImageURI());
            }

        }
    });



  }*/

  private  void setupAdaugaProdus()
  {
    Button btn = (Button) findViewById(R.id.ADD);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(MainActivity.this, Main2Activity.class));
          }
       });
   }


}

的AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ciprian.retete_carrefour">

    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Main2Activity"></activity>
    </application>

</manifest>

1 个答案:

答案 0 :(得分:0)

试试我!

public class DatabaseHandler extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "contactsManager";

// Contacts table name
private static final String TABLE_CONTACTS = "contacts";

// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_IMAGEURI = "imageUri";

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

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
            + KEY_IMAGEURI + " TEXT" + ")";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

    // Create tables again
    onCreate(db);
}

/**
 * All CRUD(Create, Read, Update, Delete) Operations
 */

// Adding new contact
void addContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName()); // Contact Name
    values.put(KEY_IMAGEURI, contact.getImageURI().toString());

    // Inserting Row
    db.insert(TABLE_CONTACTS, null, values);
    db.close(); // Closing database connection
}

// Getting single contact
Contact getContact(int id) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
            KEY_NAME, KEY_IMAGEURI }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2));
    // return contact
    return contact;
}

// Getting All Contacts
public List<Contact> getAllContacts() {
    List<Contact> contactList = new ArrayList<Contact>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Contact contact = new Contact();
            contact.setID(Integer.parseInt(cursor.getString(0)));
            contact.setName(cursor.getString(1));
            contact.setPhoneNumber(cursor.getString(2));
            // Adding contact to list
            contactList.add(contact);
        } while (cursor.moveToNext());
    }

    // return contact list
    return contactList;
}

// Updating single contact
public int updateContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName());
     values.put(KEY_IMAGEURI, contact.getImageURI().toString());

    // updating row
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
            new String[] { String.valueOf(contact.getID()) });
}

// Deleting single contact
public void deleteContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
            new String[] { String.valueOf(contact.getID()) });
    db.close();
}


// Getting contacts Count
public int getContactsCount() {
    String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();

    // return count
    return cursor.getCount();
}

}