2015-06-05 2 views
0

Является новым для Android-разработки с использованием Android Studio. Я создаю приложение, которое может создавать и просматривать записи. Но при нажатии кнопки create он перенаправляет меня на домашнюю страницу, и когда я нажимаю кнопку просмотра, приложение закрывается.android: как получить и отобразить данные в виде списка массивов

Это MainActivity для домашней страницы с помощью всего двух кнопок, создавать и просматривать данные

public class MainActivity extends Activity { 

public void createButtonClicked(View v){ 
    Intent create = new Intent(MainActivity.this, AddActivity2Activity.class); 
    startActivity(create); 
} 
public void viewButtonClicked(View v){ 
    Intent create = new Intent(MainActivity.this, ViewActivity.class); 
    startActivity(create); 
} 

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

@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); 
} 
} 

Это входной активности для создания новых записей

class MyDbHelper extends SQLiteOpenHelper { 

private static final String DB_NAME = "mydb"; 
private static final int DB_VERSION = 1; 

public static final String TABLE_NAME = "student"; 
public static final String COL_NAME = "pName"; 
public static final String COL_EMAIL = "pEmail"; 
public static final String COL_TEXT = "pText"; 
public static final String COL_DATE = "pDate"; 
private static final String STRING_CREATE = "CREATE TABLE "+TABLE_NAME+" (_id INTEGER PRIMARY KEY AUTOINCREMENT, " 
     +COL_NAME+" TEXT, "+COL_EMAIL+"TEXT," +COL_TEXT +" TEXT," +COL_DATE +" DATE);"; 

public MyDbHelper(Context context) { 
    super(context, DB_NAME, null, DB_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(STRING_CREATE); 
    ContentValues cv = new ContentValues(); 
    cv.put(COL_NAME, "New Name"); 
    cv.put(COL_EMAIL, "New Email"); 
    cv.put(COL_TEXT, "New Text"); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    cv.put(COL_DATE, dateFormat.format(new Date())); 
    db.insert(TABLE_NAME, null, cv); 
} 

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

public class AddActivity2Activity extends Activity implements View.OnClickListener{ 

EditText mText; 
EditText mText1; 
EditText mText2; 
Button mAdd; 

MyDbHelper mHelper; 
SQLiteDatabase mDb; 
Cursor mCursor; 
SimpleCursorAdapter mAdapter; 

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

    mText = (EditText)findViewById(R.id.name); 
    mText1 = (EditText)findViewById(R.id.email); 
    mText2 = (EditText)findViewById(R.id.comment); 
    mAdd = (Button)findViewById(R.id.add); 
    mAdd.setOnClickListener(this); 


    mHelper = new MyDbHelper(this); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    mDb.close(); 
    mCursor.close(); 
} 

public void onClick(View v) { 
    ContentValues cv = new ContentValues(); 
    cv.put(MyDbHelper.COL_NAME, mText.getText().toString()); 
    cv.put(MyDbHelper.COL_EMAIL, mText1.getText().toString()); 
    cv.put(MyDbHelper.COL_TEXT, mText2.getText().toString()); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    cv.put(MyDbHelper.COL_DATE, dateFormat.format(new Date())); //Insert 'now' as the date 
    mDb.insert(MyDbHelper.TABLE_NAME, null, cv); 
    mCursor.requery(); 
    mAdapter.notifyDataSetChanged(); 
    mText.setText(null); 
    mText1.setText(null); 
    mText2.setText(null); 
    Toast.makeText(getApplicationContext(), "Record Created Successfully" , Toast.LENGTH_LONG).show(); 
} 

public void viewButtonClicked(View v){ 
    Intent intent = new Intent(AddActivity2Activity.this, ViewActivity.class); 
    startActivity(intent); 
} 
} 

Это вид деятельности

public class ViewActivity extends Activity { 

MyDbHelper mHelper; 
SQLiteDatabase mDb; 
Cursor mCursor; 
private ListView mList; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_view); 
    mList = (ListView)findViewById(R.id.list); 
    mDb = mHelper.getWritableDatabase(); 
    String[] columns = new String[] {"_id", MyDbHelper.COL_NAME, MyDbHelper.COL_EMAIL, MyDbHelper.COL_TEXT, MyDbHelper.COL_DATE}; 
    mCursor = mDb.query(MyDbHelper.TABLE_NAME, columns, null, null, null, null, null, null); 
    String[] headers = new String[] {MyDbHelper.COL_NAME, MyDbHelper.COL_EMAIL, MyDbHelper.COL_TEXT, MyDbHelper.COL_DATE}; 
    List<String> itemsList = new ArrayList<String>(); 
    itemsList.add(MyDbHelper.COL_NAME); 
    itemsList.add(MyDbHelper.COL_EMAIL) ; 
    itemsList.add (MyDbHelper.COL_TEXT) ; 
    itemsList.add (MyDbHelper.COL_DATE) ; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, itemsList) ; 
    mList.setAdapter(adapter); 

} 

@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_view, 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); 
} 
} 

Буду Вам очень признателен, если вы позволите мне исправить эту ошибку

+1

** Stacktrace от аварии, пожалуйста **. Кроме того, каково ожидаемое поведение * "при нажатии create" *? – codeMagic

+3

, когда все смело, ничего не смело. Поэтому я смел твою задницу и удалил смелый стиль. – WarrenFaith

+0

@WarrenFaith поднимает хороший философский вопрос, который было бы интересно обсудить – Ungeheuer

ответ

0

Прежде всего, убедитесь, что вы добавили все ваши действия в вашем Manifest.xml

<activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".ViewActivity"/> 
     <activity android:name=".AddActivity2Activity"/> 

Во-вторых, вы не инициализирован ваш объект базы данных в вашем AddActivity2Activity. Таким образом, добавьте следующий к вам OnCreate функции:

mDb = mHelper.getWritableDatabase(); 

Есть и другие проблемы в коде, бит я не уверен, что именно вы хотите сделать с ним. - Ваш курсор будет пустым, если вы вызываете для него функцию requery(). - Также удалите следующие строки, вам не нужны их в вашей деятельности:

mCursor.requery(); 
mAdapter.notifyDataSetChanged(); 

В ViewActivity, вы должны инициализировать помощник первым:

mHelper = new MyDbHelper(this); 

Последней одна: При создании ваши таблицы в MyDbHelper классе, заменить STRING_CREATE следующим:

private static final String STRING_CREATE = "CREATE TABLE "+TABLE_NAME+" (_id INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + COL_NAME + " TEXT, " + COL_EMAIL + " TEXT, " + COL_TEXT + " TEXT," + COL_DATE + " DATE);"; 

В самом деле, вы пропустили несколько символов пробела.

Приветствия

EDIT:

Вот AddActivity2Activity

import android.app.Activity; 
import android.content.ContentValues; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.SimpleCursorAdapter; 
import android.widget.Toast; 

import java.text.SimpleDateFormat; 
import java.util.Date; 

/** 
* Created by amintavassolian on 15-06-05. 
*/ 
public class AddActivity2Activity extends Activity implements View.OnClickListener{ 

    EditText mText; 
    EditText mText1; 
    EditText mText2; 
    Button mAdd; 

    MyDbHelper mHelper; 
    SQLiteDatabase mDb; 
    Cursor mCursor; 
    SimpleCursorAdapter mAdapter; 

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

     mText = (EditText)findViewById(R.id.name); 
     mText1 = (EditText)findViewById(R.id.email); 
     mText2 = (EditText)findViewById(R.id.comment); 
     mAdd = (Button)findViewById(R.id.add); 
     mAdd.setOnClickListener(this); 


     mHelper = new MyDbHelper(this); 
     mDb = mHelper.getWritableDatabase(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     mDb.close(); 
    } 

    public void onClick(View v) { 
     ContentValues cv = new ContentValues(); 
     cv.put(MyDbHelper.COL_NAME, mText.getText().toString()); 
     cv.put(MyDbHelper.COL_EMAIL, mText1.getText().toString()); 
     cv.put(MyDbHelper.COL_TEXT, mText2.getText().toString()); 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     cv.put(MyDbHelper.COL_DATE, dateFormat.format(new Date())); //Insert 'now' as the date 
     mDb.insert(MyDbHelper.TABLE_NAME, null, cv); 

     mText.setText(null); 
     mText1.setText(null); 
     mText2.setText(null); 
     Toast.makeText(getApplicationContext(), "Record Created Successfully", Toast.LENGTH_LONG).show(); 
    } 

    public void viewButtonClicked(View v){ 
     Intent intent = new Intent(AddActivity2Activity.this, ViewActivity.class); 
     startActivity(intent); 
    } 
} 

Вот MyDbHelper:

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

import java.text.SimpleDateFormat; 
import java.util.Date; 

/** 
* Created by amintavassolian on 15-06-05. 
*/ 
class MyDbHelper extends SQLiteOpenHelper { 

    private static final String DB_NAME = "mydb"; 
    private static final int DB_VERSION = 1; 

    public static final String TABLE_NAME = "student"; 
    public static final String COL_NAME = "pName"; 
    public static final String COL_EMAIL = "pEmail"; 
    public static final String COL_TEXT = "pText"; 
    public static final String COL_DATE = "pDate"; 
    private static final String STRING_CREATE = "CREATE TABLE "+TABLE_NAME+" (_id INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + COL_NAME + " TEXT, " + COL_EMAIL + " TEXT, " + COL_TEXT + " TEXT," + COL_DATE + " DATE);"; 

    public MyDbHelper(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(STRING_CREATE); 
     ContentValues cv = new ContentValues(); 
     cv.put(COL_NAME, "New Name"); 
     cv.put(COL_EMAIL, "New Email"); 
     cv.put(COL_TEXT, "New Text"); 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     cv.put(COL_DATE, dateFormat.format(new Date())); 
     db.insert(TABLE_NAME, null, cv); 
    } 

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

и вот ViewActivity

import android.app.Activity; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

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

/** 
* Created by amintavassolian on 15-06-05. 
*/ 
public class ViewActivity extends Activity { 

    MyDbHelper mHelper; 
    SQLiteDatabase mDb; 
    Cursor mCursor; 
    private ListView mList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_view); 
     mHelper = new MyDbHelper(this); 
     mList = (ListView)findViewById(R.id.list); 
     mDb = mHelper.getWritableDatabase(); 
     String[] columns = new String[] {"_id", MyDbHelper.COL_NAME, MyDbHelper.COL_EMAIL, MyDbHelper.COL_TEXT, MyDbHelper.COL_DATE}; 
     mCursor = mDb.query(MyDbHelper.TABLE_NAME, columns, null, null, null, null, null, null); 
     String[] headers = new String[] {MyDbHelper.COL_NAME, MyDbHelper.COL_EMAIL, MyDbHelper.COL_TEXT, MyDbHelper.COL_DATE}; 
     List<String> itemsList = new ArrayList<String>(); 
     itemsList.add(MyDbHelper.COL_NAME); 
     itemsList.add(MyDbHelper.COL_EMAIL) ; 
     itemsList.add (MyDbHelper.COL_TEXT) ; 
     itemsList.add (MyDbHelper.COL_DATE) ; 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, itemsList) ; 
     mList.setAdapter(adapter); 

    } 

    @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_view, 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); 
    } 
} 

Cheers A.

+0

Я сделал все, и он не работал, я даже создал новый db и таблицу. Что я хочу сделать, так это создавать обратную связь и просматривать отзывы на другую деятельность –

+0

Вам необходимо отправить мне свой логарифм. Я создал приложение, использующее ваш код, и сделал упомянутые изменения в нем, и это сработало для меня. –

+0

Я отредактировал свой ответ, поэтому проверьте, работает ли он для вас. –

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