Im разрабатывает приложение для управления вашими дневными таблетками. Он состоит из списка таблеток (с указанием имени и часа), и вы можете добавить таблетку.База данных SQL на Android
Приложение запускается правильно, я могу перейти в макет добавления, но когда я нажимаю «Добавить», он останавливается. Я не знаю, почему это останавливается; Я думаю, что это связано с сохранением новой таблетки в database
.
Я попытался добавить в качестве намерений дополнительные часы и имя (чтобы перейти от макета Add к макету Main) и попытаться сохранить их из основного класса (я думал, возможно, это не могло сохранить, потому что я пытался сделать это из класса добавления).
Вот основной вид деятельности:
package com.example.pilladvisor;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView listPastilles;
private SQLiteDatabase db;
private Pastilla[] datos;
private TextView pastis;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent h = getIntent();
Boolean afegit = h.getBooleanExtra("AFEGIT",false);
if (afegit) {
int hora = h.getIntExtra("HORA", 0);
String nom = h.getStringExtra("NOM");
ContentValues nuevoRegistro = new ContentValues();
nuevoRegistro.put("nom", nom);
nuevoRegistro.put("hora", hora);
db.insert("Pastilles", null, nuevoRegistro);
}
PastillesSQLiteHelper bdh =
new PastillesSQLiteHelper(this, "DBPastilles", null, 1);
db = bdh.getWritableDatabase();
//startService (new Intent(this, ServeiHora.class));
Cursor c = db.rawQuery("SELECT nom, hora FROM Pastilles", null);
int i = 0;
if (c.moveToFirst()) {
//Recorremos el cursor hasta que no haya más registros
i = 0;
do {
String nom = c.getString(0);
int hora = c.getInt(1);
datos[i] = new Pastilla(nom,hora);
++i;
} while(c.moveToNext());
}
pastis = (TextView)findViewById(R.id.textView1);
if (i == 0){
pastis.setText("No tens pastilles!");
}
else {
pastis.setText("Hi ha " + i + " alarmes programades.");
AdaptadorPastilles adaptador = new AdaptadorPastilles(this);
listPastilles = (ListView)findViewById(R.id.listPastilles);
listPastilles.setAdapter(adaptador);
}
Button Boto1 = (Button)findViewById(R.id.button1);
Boto1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Afegir.class);
startActivity(intent);
}
});
}
class AdaptadorPastilles extends ArrayAdapter<Pastilla> {
Activity context;
AdaptadorPastilles(Activity context) {
super(context, R.layout.listitem_pastilla, datos);
this.context = context;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View item = inflater.inflate(R.layout.listitem_pastilla, null);
TextView lblTitulo = (TextView)item.findViewById(R.id.LblTitulo);
lblTitulo.setText(datos[position].getTitulo());
TextView lblSubtitulo =(TextView)item.findViewById(R.id.LblSubTitulo); lblSubtitulo.setText(datos[position].getSubtitulo());
return(item);
}
}
}
и здесь у вас есть Добавить активность:
package com.example.pilladvisor;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class Afegir extends Activity{
private EditText field_nom;
private EditText field_hora;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_afegir);
field_nom = (EditText)findViewById(R.id.editText1);
field_hora = (EditText)findViewById(R.id.editText2);
Button Boto1 = (Button)findViewById(R.id.button1);
Boto1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Afegir.this, MainActivity.class);
startActivity(intent);
}
});
Button Boto2 = (Button)findViewById(R.id.button2);
Boto2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String nom = field_nom.getText().toString();
int hora = Integer.parseInt(field_hora.getText().toString());
Intent intent = new Intent(Afegir.this, MainActivity.class);
intent.putExtra("AFEGIT",true);
intent.putExtra("NOM", nom);
intent.putExtra("HORA", hora);
startActivity(intent);
}
});
}
}
наконец здесь класс базы данных:
package com.example.pilladvisor;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class PastillesSQLiteHelper extends SQLiteOpenHelper {
String sqlCreate = "CREATE TABLE Pastilles (nom TEXT, hora INTEGER)";
public PastillesSQLiteHelper(Context contexto, String nom, CursorFactory factory, int version) {
super(contexto, nom, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(sqlCreate);
}
@Override
public void onUpgrade(SQLiteDatabase db, int versionAnterior, int versionNueva){
db.execSQL("DROP TABLE IF EXISTS Pastilles");
db.execSQL(sqlCreate);
}
}
Ошибка говорит:
02-03 15:23:33.492: E/AndroidRuntime(666): FATAL EXCEPTION: main
02-03 15:23:33.492: E/AndroidRuntime(666): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pilladvisor/com.example.pilladvisor.MainActivity}: java.lang.NullPointerException
02-03 15:23:33.492: E/AndroidRuntime(666): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
02-03 15:23:33.492: E/AndroidRuntime(666): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
02-03 15:23:33.492: E/AndroidRuntime(666): at android.app.ActivityThread.access$700(ActivityThread.java:134)
02-03 15:23:33.492: E/AndroidRuntime(666): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
02-03 15:23:33.492: E/AndroidRuntime(666): at android.os.Handler.dispatchMessage(Handler.java:99)
02-03 15:23:33.492: E/AndroidRuntime(666): at android.os.Looper.loop(Looper.java:137)
02-03 15:23:33.492: E/AndroidRuntime(666): at android.app.ActivityThread.main(ActivityThread.java:4867)
02-03 15:23:33.492: E/AndroidRuntime(666): at java.lang.reflect.Method.invokeNative(Native Method)
02-03 15:23:33.492: E/AndroidRuntime(666): at java.lang.reflect.Method.invoke(Method.java:511)
02-03 15:23:33.492: E/AndroidRuntime(666): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
02-03 15:23:33.492: E/AndroidRuntime(666): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
02-03 15:23:33.492: E/AndroidRuntime(666): at dalvik.system.NativeStart.main(Native Method)
02-03 15:23:33.492: E/AndroidRuntime(666): Caused by: java.lang.NullPointerException
02-03 15:23:33.492: E/AndroidRuntime(666): at com.example.pilladvisor.MainActivity.onCreate(MainActivity.java:40)
02-03 15:23:33.492: E/AndroidRuntime(666): at android.app.Activity.performCreate(Activity.java:5047)
02-03 15:23:33.492: E/AndroidRuntime(666): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
02-03 15:23:33.492: E/AndroidRuntime(666): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
02-03 15:23:33.492: E/AndroidRuntime(666): ... 11 more
'Вызванный: java.lang.NullPointerException в com.example.pilladvisor.MainActivity.onCreate (MainActivity.java:40) '- что на линии 40? Что-то есть null, и этого не должно быть. – 323go