2016-05-17 69 views
0

我是新來的Java編程的Android編程。我正在創建一個活動,顯示我從數據庫創建的ArrayList。修復與SQLite數據庫的NullPointerException

陣列完全在我的主要活動,但是當我嘗試顯示並調用該方法在另一個活動,它會顯示以下信息:

了java.lang.RuntimeException:無法啓動活動> ComponentInfo {com.example.carlos.application1/com.example.carlos.application1.ema> il}:java.lang.NullPointerException:試圖調用虛擬方法>'java.util.ArrayList com.example.carlos.application1.DBHelper .getAllCotacts()'on>空對象引用

這裏發生了什麼?爲什麼會有NullPointerException?我必須初始化?

活動:

import android.app.Activity; 
import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.PersistableBundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.widget.ArrayAdapter; 
import java.util.ArrayList; 

/** 
* Created by Carlos on 16/05/2016. 
*/ 
public class email extends Activity { 

    private Button send; 
    DBHelper mydb1; 
    private ListView obj; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.email_display); 
     ArrayList array_list = mydb1.getAllCotacts(); 
     ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array_list); 
     //ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array_list); 
     //obj = (ListView) findViewById(R.id.listView1); 
     //obj.setAdapter(arrayAdapter); 

     send = (Button) findViewById(R.id.send_button); 

     send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       try { 
        Intent emailIntent = new Intent(Intent.ACTION_SEND); 
        emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { 
         "[email protected]" 
        }); 
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
        emailIntent.putExtra(Intent.EXTRA_TEXT, "HEY"); 
        emailIntent.putExtra(Intent.EXTRA_CC, "[email protected]"); 
        emailIntent.setType("message/rfc822"); 
        startActivity(emailIntent); 
       } catch (ActivityNotFoundException anfe) { 
        Toast toast = Toast.makeText(email.this, "Sorry, no email client found", Toast.LENGTH_LONG); 
        toast.show(); 
       } 
      } 
     }); 
    } 
} 

數據庫處理器

package com.example.carlos.application1; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Hashtable; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.DatabaseUtils; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase; 

public class DBHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "MyDBName.db"; 
    public static final String CONT_TABLE_NAME = "tablename"; 
    public static final String CONT_COLUMN_ID = "id"; 
    public static final String CONT_COLUMN_CONDUCTIVITY = "conductivity"; 
    public static final String CONT_COLUMN_MOISTURE = "moisture"; 
    public static final String CONT_COLUMN_OXYGEN = "oxygen"; 
    public static final String CONT_COLUMN_PH = "ph"; 

    private HashMap hp; 

    public DBHelper(Context context) 
    { 
     super(context, DATABASE_NAME , null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(
       "create table tablename " + 
         "(id integer primary key, conductivity text,ph text,oxygen text, moisture text)" 
     ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS tablename"); 
     onCreate(db); 
    } 

    public boolean insertContact (String conductivity, String ph, String oxygen, String moisture) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("conductivity", conductivity); 
     contentValues.put("ph", ph); 
     contentValues.put("oxygen", oxygen); 
     contentValues.put("moisture", moisture); 

     db.insert("tablename", null, contentValues); 
     return true; 
    } 

    public Cursor getData(int id){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from tablename where id="+id+"", null); 
     return res; 
    } 

    public int numberOfRows(){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     int numRows = (int) DatabaseUtils.queryNumEntries(db, CONT_TABLE_NAME); 
     return numRows; 
    } 

    public boolean updateContact (Integer id, String conductivity, String ph, String oxygen, String moisture) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("conductivity", conductivity); 
     contentValues.put("ph", ph); 
     contentValues.put("oxygen", oxygen); 
     contentValues.put("moisture", moisture); 

     db.update("tablename", contentValues, "id = ? ", new String[] { Integer.toString(id) }); 
     return true; 
    } 

    public Integer deleteContact (Integer id) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     return db.delete("tablename", 
       "id = ? ", 
       new String[] { Integer.toString(id) }); 
    } 

    public ArrayList<String> getAllCotacts() 
    { 
     ArrayList<String> array_list = new ArrayList<String>(); 

     //hp = new HashMap(); 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor res = db.rawQuery("select * from tablename", null); 
     res.moveToFirst(); 

     while(res.isAfterLast() == false){ 
      array_list.add(res.getString(res.getColumnIndex(CONT_COLUMN_CONDUCTIVITY))); 
      res.moveToNext(); 
     } 
     return array_list; 
    } 
} 

回答

4

它看起來像你想打電話,你還沒有實例化一個對象的方法。在此之前,你...

ArrayList array_list = mydb1.getAllCotacts(); 

...添加一行像這樣的地方在你onCreate方法:

mydb1 = new DBHelper(this); 

,直到你實際創建一個DBHelper,你不能調用方法在上面。這就是消息'嘗試調用虛方法DBHelper.getAllCotacts()對空對象引用'的意思。

0

您需要初始化mydb1。 mydb1 = new DBHelper(mycontext);

0

你忘了初始化:(這樣的:

mydb1 = new DBHelper(this); 

然後從它調用get方法

ArrayList array_list = mydb1.getAllCotacts();