У меня проблема при попытке обновить таблицу. Но проблема заключается не в предложении sql, а в вызове метода для обновления. Это код кнопки, которые делают действиемNullpointerexception при попытке обновить в android
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btnsave:
String id="Act1";
datos.Actualizar(id,punactfis);
Toast.makeText(MainProgreso.this, "Bien Hecho", Toast.LENGTH_SHORT).show();
datos.close();
}
}
метод Код Actualizar
public void Actualizar(String id, int puntos)
{
Log.i("Variables", id);
String query="UPDATE Actividades SET puntos="+puntos+" ,total_puntos=total_puntos"+puntos+" WHERE id_actividad="+id+";";
Log.i("Consulta", query);
db.execSQL(query);
}
Это бревно
02-24 15: 07: 00,474: Е/AndroidRuntime (858): FATAL EXCEPTION: main 02-24 15: 07: 00.474: E/AndroidRuntime (858): java.lang.NullPointerException 02-24 15: 07: 00.474: E/AndroidRuntime (858): at com .example.app8semanas.Ma inProgreso.onClick (MainProgreso.java:133) 02-24 15: 07: 00.474: E/AndroidRuntime (858): at android.view.View.performClick (View.java:3480) 02-24 15:07: 00.474: E/AndroidRuntime (858): на android.view.View $ PerformClick.run (View.java:13983) 02-24 15: 07: 00.474: E/AndroidRuntime (858): at android.os.Handler. handleCallback (Handler.java:605) 02-24 15: 07: 00.474: E/AndroidRuntime (858): at android.os.Handler.dispatchMessage (Handler.java:92) 02-24 15: 07: 00.474: E/AndroidRuntime (858): at android.os.Looper.loop (Looper.java:137) 02-24 15: 07: 00.474: E/AndroidRuntime (858): at android.app.ActivityThread.main (ActivityThread. java: 4340) 02-24 15: 07: 00.474: E/AndroidRuntime (858): при java.lang.reflect.Method.invokeNative (собственный метод) 02-24 15: 07: 00.474: E/Andr oidRuntime (858): at java.lang.reflect.Method.invoke (Method.java:511) 02-24 15: 07: 00.474: E/AndroidRuntime (858): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:784) 02-24 15: 07: 00.474: E/AndroidRuntime (858): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551) 02-24 15: 07: 00.474: E/AndroidRuntime (858): at dalvik.system.NativeStart.main (родной метод)
благодарит за вашу помощь.
Весь код класса
public class MainProgreso extends Activity implements OnClickListener, OnCheckedChangeListener {
private TabHost th;
private TextView dia;
private RadioGroup rg1, rg2, rg3;
private ImageButton btns1, btns2, btns3;
String fecha;
int punactfis, punfrve, pundor;
OperacionesBD datos;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.progreso);
fecha = getIntent().getStringExtra("fecha");
dia=(TextView)findViewById(R.id.txt2);
dia.setText(fecha);
rg1=(RadioGroup)findViewById(R.id.rgactfis);
rg2=(RadioGroup)findViewById(R.id.rgfruveg);
rg3=(RadioGroup)findViewById(R.id.rgdormir);
rg1.setOnCheckedChangeListener(this);
rg2.setOnCheckedChangeListener(this);
rg3.setOnCheckedChangeListener(this);
btns1=(ImageButton)findViewById(R.id.btnsave);
btns2=(ImageButton)findViewById(R.id.btnsave1);
btns3=(ImageButton)findViewById(R.id.btnsave2);
btns1.setOnClickListener(this);
btns2.setOnClickListener(this);
btns3.setOnClickListener(this);
th=(TabHost)findViewById(android.R.id.tabhost);
th.setup();
TabSpec ts1=th.newTabSpec("Tab1");
ts1.setIndicator("Actividad_Fisica");
ts1.setContent(R.id.tab1);
th.addTab(ts1);
TabSpec ts2=th.newTabSpec("Tab2");
ts2.setIndicator("Frutas_Verduras");
ts2.setContent(R.id.tab2);
th.addTab(ts2);
TabSpec ts3=th.newTabSpec("Tab3");
ts3.setIndicator("Sueño");
ts3.setContent(R.id.tab3);
th.addTab(ts3);
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
switch(checkedId)
{
case R.id.rbaf1:
punactfis=2;
break;
case R.id.rbaf2:
punactfis=4;
break;
case R.id.rbaf3:
punactfis=6;
break;
case R.id.rbaf4:
punactfis=8;
break;
}
switch(checkedId)
{
case R.id.rbfv1:
punfrve=3;
break;
case R.id.rbfv2:
punfrve=0;
break;
}
switch (checkedId)
{
case R.id.rbd1:
pundor=3;
break;
case R.id.rbd2:
pundor=0;
break;
}
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btnsave:
String query="UPDATE Actividades SET puntos="+punactfis+" ,total_puntos=total_puntos"+punactfis+" WHERE id_actividad=Act1;";
datos.InsertarMeta(query);
Toast.makeText(MainProgreso.this, "Bien Hecho", Toast.LENGTH_SHORT).show();
datos.close();
}
}
}
Вы инициализировали объект datos? 'datos = new xy'? – ByteHamster
Есть ли причина, по которой вы не просто используете метод 'update()'? Вы должны хотя бы рассмотреть возможность использования параметризованных запросов для предотвращения SQLInjection. –
Да, объект datos был опознан. И причина, почему я не использую метод обновления, - это то, что поля обновляются с помощью математических операций. –