0

at this time I want to ask, I got an error when I try to read my data from database, in Validation activity, The Error is Sign Below.

Validation.java

public class Validation extends Activity{

private static DBDataSource dataSource; 


// Error Messages
private static final String REQUIRED_MSG = "required";


@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    dataSource = new DBDataSource(this);
    dataSource.open();
}
//this method is to check is my textbox empty or not, the i want to modified to check is my textbox empty or equals data from database
public static boolean hasText(EditText editText) {

    ArrayList<Sma> list = dataSource.getAllSma(); >> when i add this code, the apps currently stop, and the got error message java.lang.NullPointer Exception
    String text = editText.getText().toString().trim();
    editText.setError(null);

    // length 0 means there is no text
    if (text.length() == 0) {
        editText.setError(REQUIRED_MSG);
        return false;
    }

    return true;

}

and here is my DBDataSource

 public ArrayList<Sma> getAllSma() 
 {
    ArrayList<Sma> daftarSma = new ArrayList<Sma>();

    // select all SQL query
    Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, null, null, null, null, null);


    cursor.moveToFirst();

    while (!cursor.isAfterLast()) 
    {
      Sma sekolah = cursorToSma(cursor);
      daftarSma.add(sekolah);
      cursor.moveToNext();
    }

    cursor.close();
    return daftarSma;
  }

can anyone help me figured this out about this error, cause i really don't know why this is happend. Thank you :D

and here when i call validation Activity

 public class CreateData extends Activity implements OnClickListener{
 private Validation valid;
 public void onCreate(Bundle savedInstanceState) 
 {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.create_data);
  edNama_sma        = (EditText) findViewById(R.id.nama_sma);
  registerViews();
  }

 private void registerViews() {

        edNama_sma.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable s) {
                valid.hasText(edNama_sma);
            }
            public void beforeTextChanged(CharSequence s, int start, int count, int after){}

            public void onTextChanged(CharSequence s, int start, int before, int count){}
        });
    @Override
    public void onClick(View v) 
    {}

my Error

 04-05 13:54:00.727: E/AndroidRuntime(27565): FATAL EXCEPTION: main
 04-05 13:54:00.727: E/AndroidRuntime(27565): java.lang.NullPointerException
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at      com.example.validation.search.Validation.hasText(Validation.java:76)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at com.example.search.CreateData$5.afterTextChanged(CreateData.java:230)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.widget.TextView.sendAfterTextChanged(TextView.java:7259)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:8915)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:970)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:497)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:672)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:435)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:333)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.os.Handler.dispatchMessage(Handler.java:99)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.os.Looper.loop(Looper.java:137)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at android.app.ActivityThread.main(ActivityThread.java:5099)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at java.lang.reflect.Method.invokeNative(Native Method)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at java.lang.reflect.Method.invoke(Method.java:511)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
 04-05 13:54:00.727: E/AndroidRuntime(27565):   at dalvik.system.NativeStart.main(Native Method)
7
  • 1
    Post some stacktrace. Likely datasource is not initialized when you call the method in a static way. Commented Apr 5, 2014 at 6:54
  • @laalto : i already post it, can you help me out? Commented Apr 5, 2014 at 6:57
  • Well, how are you instantiating your Validation activity? Commented Apr 5, 2014 at 6:59
  • @ndr_sd mostly your edittext object is null Commented Apr 5, 2014 at 7:00
  • @laalto : i already post my Activity, can you check it? Commented Apr 5, 2014 at 7:11

1 Answer 1

1

The activity Validation has not been initialized and its onCreate() has not been called. Hence datasource is null and you get NPE.

From what you've posted, Validation should not be an activity at all. You should only extend Activity for classes that are actual activities, listed in manifest and instantiated via an Intent.

For methods that require a valid Context such as SQLiteOpenHelper constructor, pass it as an argument instead of trying to use this of a non-instantiated Activity.

Sign up to request clarification or add additional context in comments.

3 Comments

instantiate via an intent? do you mean i should call the validation activity?
No, I mean validation should not be an activity since you don't invoke it via an intent.
okay, it's mean that i should Context when i need to access dataSource right? can you give some example? cause i'm really newbie in programming :D

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.