2015-08-02 6 views
1

Добрый вечер, Мне нужно знать, как отправить строку с помощью намерения в базу данных!отправьте строку по ссылке в базу данных

Я попытался сделать это, но это не сработало.

Это код действия.

b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      note = (EditText) findViewById(R.id.etNote); 
      String notes = note.getText().toString(); 
      db.insert(notes); 


     } 
    }); 

И это код из базы данных.

public long insert(String message) { 
     SQLiteDatabase db = getWritableDatabase(); 


     ContentValues cv = new ContentValues(); 
     cv.put(NOTE, message); 
     return db.insert(DATABASE_TABLE, null, cv); 
    } 

Но, к сожалению, это не сработало! Кто-нибудь знает, как это сделать?

Вот и весь код для деятельности, которая покажет listView с базой данных.

import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.LoaderManager.LoaderCallbacks; 
import android.support.v4.content.CursorLoader; 
import android.support.v4.content.Loader; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.view.Menu; 
import android.widget.ListView; 

public class show extends FragmentActivity implements LoaderCallbacks<Cursor> { 

    SimpleCursorAdapter mAdapter; 
    ListView mListView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_show); 

     mListView = (ListView) findViewById(R.id.listview); 

     mAdapter = new SimpleCursorAdapter(getBaseContext(), 
       R.layout.listview_item_layout, 
       null, 
       new String[] { CustomerDB.NOTE}, 
       new int[] { R.id.note }, 0); 

     mListView.setAdapter(mAdapter); 

     /** Creating a loader for populating listview from sqlite database */ 
     /** This statement, invokes the method onCreatedLoader() */ 
     getSupportLoaderManager().initLoader(0, null, this); 

    } 



    /** A callback method invoked by the loader when initLoader() is called */ 
    @Override 
    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 
     Uri uri = Customer.CONTENT_URI; 
     return new CursorLoader(this, uri, null, null, null, null); 
    } 

    /** A callback method, invoked after the requested content provider returned all the data */ 
    @Override 
    public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) { 
     mAdapter.swapCursor(arg1); 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> arg0) { 
     mAdapter.swapCursor(null); 
    } 
} 

И это поставщик контента.

import android.content.ContentProvider; 
import android.content.ContentValues; 
import android.content.UriMatcher; 
import android.database.Cursor; 
import android.net.Uri; 

/** A custom Content Provider to do the database operations */ 
public class Customer extends ContentProvider{ 

    public static final String PROVIDER_NAME = "in.wptrafficanalyzer.sqllistviewdemo.customer"; 

    /** A uri to do operations on cust_master table. A content provider is identified by its uri */ 
    public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/customers"); 

    /** Constants to identify the requested operation */ 
    private static final int CUSTOMERS = 1; 

    private static final UriMatcher uriMatcher ; 
    static { 
     uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
     uriMatcher.addURI(PROVIDER_NAME, "customers", CUSTOMERS); 
    } 

    /** This content provider does the database operations by this object */ 
    CustomerDB mCustomerDB; 

    /** A callback method which is invoked when the content provider is starting up */ 
    @Override 
    public boolean onCreate() { 
     mCustomerDB = new CustomerDB(getContext()); 
     return true; 
    } 

    @Override 
    public String getType(Uri uri) { 
     return null; 
    } 

    /** A callback method which is by the default content uri */ 
    @Override 
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { 

     if(uriMatcher.match(uri)==CUSTOMERS){ 
      return mCustomerDB.getAllCustomers(); 
     }else{ 
      return null; 
     } 
    } 

    @Override 
    public int delete(Uri uri, String selection, String[] selectionArgs) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public Uri insert(Uri uri, ContentValues values) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public int update(Uri uri, ContentValues values, String selection, 
         String[] selectionArgs) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 
} 

И это база данных.

import android.content.ContentValues; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.os.Bundle; 

public class CustomerDB extends SQLiteOpenHelper{ 

    /** Database name */ 
    private static String DBNAME = "sqllistviewdemo"; 

    /** Version number of the database */ 
    private static int VERSION = 1; 

    /** Field 1 of the table cust_master, which is the primary key */ 
    public static final String KEY_ROW_ID = "_id"; 


    public static final String NOTE="OK"; 

    /** A constant, stores the the table name */ 
    private static final String DATABASE_TABLE = "cust_master"; 

    /** An instance variable for SQLiteDatabase */ 
    private SQLiteDatabase mDB; 

    /** Constructor */ 
    public CustomerDB(Context context) { 
     super(context, DBNAME, null, VERSION); 
     this.mDB = getWritableDatabase(); 
    } 

    /** This is a callback method, invoked when the method 
    * getReadableDatabase()/getWritableDatabase() is called 
    * provided the database does not exists 
    * */ 


    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String sql =  "create table "+ DATABASE_TABLE + " (" 
       + KEY_ROW_ID + " integer primary key autoincrement , " 
       + NOTE + " text ) " ; 

     db.execSQL(sql); 

    } 

    public long insert(String message) { 
     SQLiteDatabase db = getWritableDatabase(); 


     ContentValues cv = new ContentValues(); 
     cv.put(NOTE, message); 
     return db.insert(DATABASE_TABLE, null, cv); 
    } 

    /** Returns all the customers in the table */ 
    public Cursor getAllCustomers(){ 
     return mDB.query(DATABASE_TABLE, new String[] { KEY_ROW_ID, NOTE } , 
       null, null, null, null,null 
       ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
     // TODO Auto-generated method stub 
    } 
} 
+0

Вы должны объяснить, в деталях,что «это не сработало» означает. – CommonsWare

+0

Также объясните, что вы подразумеваете под «через намерение» –

+0

Я имею в виду, что база данных не отображается в виде списка. через intent = using intent :) –

ответ

2
/** SQLiteDatabase IMPLEMENTATION */ 
public final class SQLiteDatabase extends SQLiteClosable { 

/** 
* Convenience method for inserting a row into the database. 
* 
* @param table the table to insert the row into 
* @param nullColumnHack optional; may be <code>null</code>. 
*   SQL doesn't allow inserting a completely empty row without 
*   naming at least one column name. If your provided <code>values</code> is 
*   empty, no column names are known and an empty row can't be inserted. 
*   If not set to null, the <code>nullColumnHack</code> parameter 
*   provides the name of nullable column name to explicitly insert a NULL into 
*   in the case where your <code>values</code> is empty. 
* @param values this map contains the initial column values for the 
*   row. The keys should be the column names and the values the 
*   column values 
* @return the row ID of the newly inserted row, or -1 if an error occurred 
*/ 
public long insert(String table, String nullColumnHack, ContentValues values) 
  • проверка требуемого столбец значения содержания (помеченный как ТРЕБУЕТСЯ NOT NULL)

  • КСТАТИ Вы смешиваете все

ЕСЛИ U РЕШИЛИ ИСПОЛЬЗОВАТЬ СОДЕРЖАНИЕ - ЭТО ДОЛЖНО ОТДЕЛЬНО ОТ ВАШЕГО ПРИЛОЖЕНИЯ

  • В СОДЕРЖАНИЯ
    использовать подпрограммы базы данных вставки/обновления/удаления для coresponding контента методы поставщика
  • В APP (деятельность и т.д.) вы используете погрузчики (обратные вызовы) или распознаватель контента

    getContentResolver () .Вмонтировать (...);/.query (..); .Удалить(..);

пример того, как использовать контент распознаватель:

/** 
* update user by id with USERS table info 
* returns row (should be the same as prev 
*/ 
public int updateUserPassword(User user) { 

    // Define the updated row content. 
    ContentValues updatedValues = new ContentValues(); 

    // Assign values for each row. 
    updatedValues.put(UserTable.USER_PASSWORD, user.getPassword()); 

    // get where for insert/update 
    String query = " " + UserTable.USER_ID + "=?"; 
    String rowId = String.valueOf(user.getID()); 

    /** insert record via content provider */ 
    App.log.debug("Sending uri via content resolver to content provider..."); 

    // construct URI 
    Uri uri = Uri.parse(ContentProvider.USERS_CONTENT_URI + "/" + rowId); 

    // involve content resolver 
    int updatedRouCount = getContext().getContentResolver().update(uri, 
      updatedValues, 
      query, 
      new String[]{rowId}); 

    /** return count of updated rows should be 1 if all ok */ 
    return updatedRouCount; 
} 

ДЛЯ ВЫПОЛНЕНИЯ СОДЕРЖАНИЯ ПЕРВОГО READ

EXCELENT HOW TO

ANDROID API - CONTENT PROVIDER

+0

@IbrahimMagdy Если вам нужна помощь, напишите – ceph3us

+0

, но где я должен помещать этот контент-резольвер? –

+0

[email protected] –

Смежные вопросы