2015-02-24 2 views
0

У меня проблема при попытке обновить таблицу. Но проблема заключается не в предложении 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(); 
    } 
} 

}

+1

Вы инициализировали объект datos? 'datos = new xy'? – ByteHamster

+0

Есть ли причина, по которой вы не просто используете метод 'update()'? Вы должны хотя бы рассмотреть возможность использования параметризованных запросов для предотвращения SQLInjection. –

+0

Да, объект datos был опознан. И причина, почему я не использую метод обновления, - это то, что поля обновляются с помощью математических операций. –

ответ

-1

Это кажется "Datos" равна нулю. Вы создали этот объект?

К тому же, рассмотрим возможность привязки ваших параметров sql.

+0

Как получилось -1? – JHH

+0

Да, я создал объект. –

+0

Ну, вы не указали, какая строка кода выбрала исключение, но она находится в методе onClick, и единственное, что я могу думать об этом, - это выбросить NPE, если datos имеет значение null или v равно null, а onClick никогда не будет вызывается для нулевого представления. Можете ли вы добавить информацию о том, какая строка выбрала исключение? – JHH

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