2015-07-03 3 views
1

Я создаю приложение, которое позволит пользователям добавлять школьные предметы. Прежде чем я продолжу, позвольте мне дать вам мой код:Как отобразить все данные из базы данных sqlite

MainActivity:

package cannon.gaming.mymarks; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.text.Html; 
import android.text.TextUtils; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.File; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 


public class MainActivity extends ActionBarActivity { 
    TextView textSubject; 
    String SUBJECT, PASS; 
    Context ctx = this; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getSupportActionBar().hide(); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.activity_main); 

     /*Button buttonAdd = (Button) findViewById(R.id.buttonAdd); 
     buttonAdd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(v.getContext(), RegisterActivity.class); 
       intent.setFlags(intent.FLAG_ACTIVITY_CLEAR_TOP); 
       intent.putExtra("EXIT", true); 
       startActivityForResult(intent, 0); 
      } 
     });*/ 

     Button buttonAdd = (Button) findViewById(R.id.buttonAdd); 
     textSubject = (TextView) findViewById(R.id.textSubject); 
     buttonAdd.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       showInputDialog(); 
      } 
     }); 
    } 

    protected void showInputDialog() { 

     // get prompts.xml view 
     LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this); 
     View promptView = layoutInflater.inflate(R.layout.activity_dialog, null); 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this); 
     alertDialogBuilder.setView(promptView); 

     final EditText editText = (EditText) promptView.findViewById(R.id.edittext); 
     // setup a dialog window 
     alertDialogBuilder.setCancelable(false) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         SUBJECT = editText.getText().toString(); 
         PASS = "0"; 
         DatabaseOperations DB = new DatabaseOperations(ctx); 
         DB.putInformation(DB, SUBJECT, PASS); 
         Toast.makeText(getBaseContext(), "Subject added", Toast.LENGTH_SHORT).show(); 
         finish(); 
        } 
       }) 
       .setNegativeButton("Cancel", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           dialog.cancel(); 
          } 
         }); 

     // create an alert dialog 
     AlertDialog alert = alertDialogBuilder.create(); 
     alert.show(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

TableData:

package cannon.gaming.mymarks; 

import android.provider.BaseColumns; 

/** 
* Created by Asuspc on 01/07/2015. 
*/ 
public class TableData { 

    public TableData() 
    { 

    } 

    public static abstract class TableInfo implements BaseColumns 
    { 
     public static final String USER_NAME = "user_name"; 
     public static final String USER_PASS = "user_pass"; 
     public static final String DATABASE_NAME = "user_info"; 
     public static final String TABLE_NAME = "reg_info"; 
    } 

} 

DatabaseOperations:

package cannon.gaming.mymarks; 


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

/** 
* Created by Asuspc on 01/07/2015. 
*/ 
public class DatabaseOperations extends SQLiteOpenHelper { 
    public static final int database_version = 1; 
    public String CREATE_QUERY = "CREATE TABLE "+ TableData.TableInfo.TABLE_NAME+"("+ TableData.TableInfo.USER_NAME+" TEXT,"+ TableData.TableInfo.USER_PASS+" TEXT);"; 
    public DatabaseOperations(Context context) { 
     super(context, TableData.TableInfo.DATABASE_NAME, null, database_version); 
     Log.d("Database Operations", "Database created"); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase sdb) 
    { 
     sdb.execSQL(CREATE_QUERY); 
     Log.d("Database Operations", "Table created"); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) 
    { 

    } 
    public void putInformation(DatabaseOperations dop,String name, String pass) 
    { 
     SQLiteDatabase SQ = dop.getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 
     cv.put(TableData.TableInfo.USER_NAME, name); 
     cv.put(TableData.TableInfo.USER_PASS, pass); 
     long k = SQ.insert(TableData.TableInfo.TABLE_NAME, null, cv); 
     Log.d("Database Operations", "One row inserted"); 
    } 
    public Cursor getInformation(DatabaseOperations dop) 
    { 
     SQLiteDatabase SQ = dop.getReadableDatabase(); 
     String[] columns = {TableData.TableInfo.USER_NAME, TableData.TableInfo.USER_PASS}; 
     Cursor CR = SQ.query(TableData.TableInfo.TABLE_NAME, columns, null, null, null, null, null); 
     return CR; 
    } 
} 

Теперь позвольте мне объяснить. Когда я нажимаю кнопку «buttonAdd», это позволит мне ввести имя темы, очевидно, и сохранить его в базе данных.

Но я не могу сделать это, я хочу отобразить всю базу данных по MainActivity. И это должно быть так:

  • названия предметов на левой стороне,
  • среднее из этих предметов на правой стороне (строка PASS должна быть, что в среднем, поэтому это 0, когда вы первый добавьте тему).

И я хочу, чтобы каждый из этих субъектов был кликабельным, поэтому, когда вы нажимаете на него, он должен показывать вам все метки этого объекта и позволять добавлять или удалять их.

Теперь, я думаю, отображение данных не должно быть таким сложным, но мне все же нужна ваша помощь. Но делая каждый объект кликабельным, я действительно понятия не имею, как это сделать. И каждый предмет, имеющий свои оценки, я не знаю, означает ли это новая деятельность для каждого нового предмета или новой базы данных или что?

EDIT:

MainActivity Сейчас:

package cannon.gaming.mymarks; 

import android.annotation.TargetApi; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.database.Cursor; 
import android.os.Build; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.text.Html; 
import android.text.TextUtils; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.File; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 


public class MainActivity extends ActionBarActivity { 
    String SUBJECT, PASS; 
    Context CTX = this; 
    private SimpleCursorAdapter adapter; 

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getSupportActionBar().hide(); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.activity_main); 

     /*Button buttonAdd = (Button) findViewById(R.id.buttonAdd); 
     buttonAdd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(v.getContext(), RegisterActivity.class); 
       intent.setFlags(intent.FLAG_ACTIVITY_CLEAR_TOP); 
       intent.putExtra("EXIT", true); 
       startActivityForResult(intent, 0); 
      } 
     });*/ 

     Button buttonAdd = (Button) findViewById(R.id.buttonAdd); 
     displayListView(); 
     buttonAdd.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       showInputDialog(); 
      } 
     }); 
    } 

    protected void showInputDialog() { 

     // get prompts.xml view 
     LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this); 
     View promptView = layoutInflater.inflate(R.layout.activity_dialog, null); 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this); 
     alertDialogBuilder.setView(promptView); 

     final EditText editText = (EditText) promptView.findViewById(R.id.edittext); 
     // setup a dialog window 
     alertDialogBuilder.setCancelable(false) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         SUBJECT = editText.getText().toString(); 
         PASS = "0"; 
         DatabaseOperations DB = new DatabaseOperations(CTX); 
         DB.putInformation(DB, SUBJECT, PASS); 
         Toast.makeText(getBaseContext(), "Subject added", Toast.LENGTH_SHORT).show(); 
         adapter.notifyDataSetChanged(); 
         displayListView(); 
        } 
       }) 
       .setNegativeButton("Cancel", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           dialog.cancel(); 
          } 
         }); 

     // create an alert dialog 
     AlertDialog alert = alertDialogBuilder.create(); 
     alert.show(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    private void displayListView() 
    { 
     DatabaseOperations DOP = new DatabaseOperations(CTX); 
     Cursor CR = DOP.getInformation(DOP); 
     CR.moveToFirst(); 
     // The desired columns to be bound 
     String[] columns = new String[]{ 
       TableData.TableInfo.USER_NAME, 
       TableData.TableInfo.USER_PASS 
     }; 
     // the XML defined views which the data will be bound to 
     int[] to = new int[]{ 
       R.id.code, 
       R.id.name, 
     }; 
     adapter = new SimpleCursorAdapter(
       this, R.layout.activity_login, 
       CR, 
       columns, 
       to, 
       0); 
     ListView listView = (ListView) findViewById(R.id.listView); 
     // Assign adapter to ListView 
     listView.setAdapter(adapter); 
    } 
} 

ответ

1

Для отображения данных, вы должны использовать ListView и CursorAdapter. Вот пример кода для вас: http://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html

В этом примере кода, вы можете увидеть:

listView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> listView, View view, 
    int position, long id) { 
    // Get the cursor, positioned to the corresponding row in the result set 
    Cursor cursor = (Cursor) listView.getItemAtPosition(position); 

    // Get the state's capital from this row in the database. 
    String countryCode = 
    cursor.getString(cursor.getColumnIndexOrThrow("code")); 
    Toast.makeText(getApplicationContext(), 
    countryCode, Toast.LENGTH_SHORT).show(); 

    } 
}); 

OnItemClickListener поможет вам справиться, когда элемент в ListView щелкают.

Надеюсь, это вам поможет.

+0

Я пытался исправить это с помощью той ссылки, которую вы мне дали, теперь у меня есть эта ошибка: java.lang.RuntimeException: Не удалось запустить Activity ComponentInfo {cannon.gaming.mymarks/cannon.gaming.mymarks.MainActivity}: java.lang.IllegalArgumentException: column '_id' не существует –

+0

Я отредактировал этот вопрос и добавил, как выглядит мой код MainActivity. –

+0

Просто FIXED, спасибо: D –

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