2014-01-12 33 views
0

MainActivity:插入數據到數據庫中的onClick方法

public class MainActivity extends Activity implements SensorEventListener, OnClickListener { 

    private SensorManager mSensorManager; 
    private Sensor mAcc; 
    TextView xaxis,yaxis,zaxis,ballxy,gps,statics; 
    public float velocity = 10.6f; 
    public float xPosition,yPosition,zPosition; 
    public static float staticXposition,staticYposition,staticZposition; 
    private Database myDBAdapter; 

    public ContentValues values; 

    public String GPSposition; 
    public SQLiteDatabase db; 


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

     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mAcc = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

     LocationManager locMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     LocationListener locList = new LocationListener() { 

      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderEnabled(String provider) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onLocationChanged(Location location) { 
       gps.setText("GPS:"+location.getLatitude()+";"+location.getLongitude()); 
       GPSposition = location.getLatitude() + " " + location.getLongitude(); 

      } 
     }; 
     locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locList); 


     // inicjowanie TextView 
     gps = (TextView) findViewById(R.id.gps); 
     xaxis = (TextView) findViewById(R.id.xaxis); 
     yaxis = (TextView) findViewById(R.id.yaxis); 
     zaxis = (TextView) findViewById(R.id.zaxis); 
     ballxy = (TextView) findViewById(R.id.ballxy); 
     statics = (TextView) findViewById(R.id.statics); 



     Button start = (Button) findViewById(R.id.start); 
     start.setOnClickListener(this); 


     myDBAdapter = new Database(this).open(); 
     //TODO Any database operations 
     myDBAdapter.close(); 


    } 


    public void insertData(){ 


     String time; 
     Time now = new Time(); 
     now.setToNow(); 
     time = now.toString(); 

     values.put("ID", "1"); 
     values.put("LEFT_POSITION", xPosition); 
     values.put("RIGHT_POSITION", yPosition); 
     values.put("GPS", GPSposition); 
     values.put("TIME", time); 

     if(db!=null){ 
      db.insert("baza", null, values);  
     }else{ 
      Log.d("AppName","db is null"); 
     } 



    } 

    @Override 
    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 void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public final void onSensorChanged(SensorEvent event) { 
     ImageView ball = (ImageView) findViewById(R.id.ball); 
     xPosition = event.values[0] - staticXposition; 
     yPosition = event.values[1] - staticYposition; 
     zPosition = event.values[2] - staticZposition; 

    } 




    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     mSensorManager.unregisterListener(this); 
    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     mSensorManager.registerListener(this, mAcc, SensorManager.SENSOR_DELAY_NORMAL); 
    } 




    @Override 
    public void onClick(View v) { 

     switch(v.getId()){ 
     case R.id.start: 

      staticXposition = xPosition; 
      staticYposition = yPosition; 
      staticZposition = zPosition; 

      insertData(); 


     } 

    } 


} 

我創建方法與contentValues:

public void insertData(){ 


     String time; 
     Time now = new Time(); 
     now.setToNow(); 
     time = now.toString(); 

     values.put("ID", "2"); 
     values.put("LEFT_POSITION", xPosition); 
     values.put("RIGHT_POSITION", xPosition); 
     values.put("GPS", GPSposition); 
     values.put("TIME", time); 

     db.insert("baza", null, values); 


    } 

而且我嘗試將數據發送到數據庫「巴扎」,當用戶將按按鈕。

public void onClick(View v) { 

     switch(v.getId()){ 
     case R.id.start: 

      staticXposition = xPosition; 
      staticYposition = yPosition; 
      staticZposition = zPosition; 
       insertData(); 


     } 

    } 

我有一些變量:xPosition,yPosition和zPosition。這些變量中的數據是動態的,取決於加速度計。我試圖將這些數據發送到我的數據庫,但我有一個錯誤:致命異常主。空指針異常。我哪裏有錯誤?

01-12 12:42:17.093: E/AndroidRuntime(9216): FATAL EXCEPTION: main 
01-12 12:42:17.093: E/AndroidRuntime(9216): java.lang.NullPointerException 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at pl.pawelfrydrych.flyingball.MainActivity.insertData(MainActivity.java:123) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at pl.pawelfrydrych.flyingball.MainActivity.onClick(MainActivity.java:218) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at android.view.View.performClick(View.java:4240) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at android.view.View$PerformClick.run(View.java:17721) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at android.os.Handler.handleCallback(Handler.java:730) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at android.os.Looper.loop(Looper.java:137) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at java.lang.reflect.Method.invoke(Method.java:525) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
01-12 12:42:17.093: E/AndroidRuntime(9216):  at dalvik.system.NativeStart.main(Native Method) 
01-12 12:42:19.673: I/Process(9216): Sending signal. PID: 9216 SIG: 9 
+0

發佈您的錯誤日誌! –

+0

哪一行是MainActivity.java:123? – Magnilex

+0

MainActivity.java:123是:在values.put(「ID」,「2」)之前的方法insertData中的空白空間。 我認爲這個問題在ContentValue中。它看起來很不錯,所以我不知道它爲什麼不起作用:( – Algeroth

回答

0

檢查你的數據庫 試試這個代碼:

public void insertData(){ 


     String time; 
     Time now = new Time(); 
     now.setToNow(); 
     time = now.toString(); 

     values.put("ID", "2"); 
     values.put("LEFT_POSITION", xPosition); 
     values.put("RIGHT_POSITION", xPosition); 
     values.put("GPS", GPSposition); 
     values.put("TIME", time); 

     if(db!=null)   
      db.insert("baza", null, values); 
     else 
      Log.d("AppName","db is null); 
} 

編輯答案:

myDBAdapter = new Database(this).open(); 
     //TODO Any database operations 
     myDBAdapter.close(); 

你爲什麼在這裏關閉您的數據庫適配器?插入值後,這應該是closed.Plus你在初始化數據庫?

編輯號碼。 2: 在你的代碼

protected void onStop() { 
    myDBAdapter.close();; 
} 

活動的可視生命週期,以在onStart()的調用之間發生,直到相應的調用的onStop()改變這一點。在此期間,用戶可以在屏幕上看到活動,但它可能不在前臺並與用戶進行交互。在這兩種方法之間,您可以維護向用戶顯示活動所需的資源。例如,您可以在onStart()中註冊BroadcastReceiver,以監視影響UI的更改,並在用戶不再看到您顯示的內容時,在onStop()中取消註冊。可以多次調用onStart()和onStop()方法,因爲活動對用戶可見並隱藏。

請經過android的基礎。

+0

不幸的是,db不是空的:P – Algeroth

+0

你是否以寫模式打開數據庫?你在寫外部存儲嗎?請粘貼你的代碼。 –

+0

行數太多..但是行數據庫被創建,這是沒有問題的。問題是當我嘗試把數據放在這裏:( – Algeroth