2016-04-07 4 views
0

В моем приложении я хочу выполнить действие, проверив условие. У меня две строки odate и indate. Эти строки берут данные из базы данных. Если в обеих строках нет данных, я хочу показать диалоговое окно предупреждения. Если в индексе или одате есть какое-то значение, я хочу перейти к следующему действию. Возникает проблема, когда я пытаюсь проверить «если indate и odate равны нулю» выполняют функцию. но когда он фактически является нулевым, он отображает исключение нулевого указателя вместо того, чтобы вводить предложение else. Вот мой кодnull Указатель исключения при проверке строки

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.menu_iem); 


getdate(); 
invorder(); 
orderheader(); 

} 
    private void orderheader() { 
    // TODO Auto-generated method stub 
     try{ 
     DatabaseHelper dbHelper = new DatabaseHelper(this.getApplicationContext()); 
     newDB = dbHelper.getWritableDatabase(); 
     Cursor c = newDB.rawQuery("select order_date from order_header where cust_code="+code, null); 
     while (c.moveToNext()){ 

      odate = c.getString(c.getColumnIndex("order_date")); 
       Log.v("orderheader", odate); 

      }} 
    catch (SQLiteException se) { 
     Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
     }   
} 
private void invorder() { 
    // TODO Auto-generated method stub 
    try{ 
    DatabaseHelper dbHelper = new DatabaseHelper(this.getApplicationContext()); 
     newDB = dbHelper.getWritableDatabase(); 
     Cursor c = newDB.rawQuery("select inv_date from inv_header where cust_code="+code, null); 
    while (c.moveToNext()){ 

      indate = c.getString(c.getColumnIndex("inv_date")); 
       Log.v("invheader", indate); 

      } 
    catch (SQLiteException se) { 
     Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
     }  
     } 
public void onBackPressed(){ 
    gettime(); 
    String m = ""; 
    if(odate.matches("") && indate.matches("")){ 

     DatabaseHelper databasecontroller = new  DatabaseHelper(Menu_iem.this); 
     databas.put("rscode","0"); 
     databasecontroller.enterreason(databas); 
     Intent inn= new Intent(getApplicationContext(),Home.class); 
     startActivity(inn); 
    } 
    else{ 
    spinneralert(); 
    } 
DatabaseHelper db = new DatabaseHelper(getApplicationContext()); 
     List<String> labels = db.getAllLabels(); 

     // Creating adapter for spinner 
     final ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, labels); 
     final Spinner sp = new Spinner(Menu_iem.this); 
     sp.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
     sp.setAdapter(dataAdapter); 
     // attaching data adapter to spinner 
     String str = "PLEASE SELECT YOUR REASON "; 
     sp.setAdapter(dataAdapter); 
     sp.setOnItemSelectedListener(this); 
     AlertDialog.Builder builder = new AlertDialog.Builder(Menu_iem.this); 
     builder.setTitle(str); 
     builder.setView(sp); 
     builder.setPositiveButton("YES", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
       DatabaseHelper databasecontroller = new DatabaseHelper(Menu_iem.this); 
       databas.put("rscode",rc); 
       databasecontroller.enterreason(databas); 
       Intent inn= new Intent(getApplicationContext(),Home.class); 
       startActivity(inn); 
      } 
     }); 
     builder.setNegativeButton("CANCEL",new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
       dialog.cancel(); 
      } 
     }); 

     builder.create().show(); 
    } 
@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, 
     long id) { 
    // TODO Auto-generated method stub 
    String label = parent.getItemAtPosition(position).toString(); 
    try{ 
     DatabaseHelper dbHelper = new DatabaseHelper(this.getApplicationContext()); 
    newDB = dbHelper.getWritableDatabase(); 
    Cursor c = newDB.rawQuery("select reason_code from reason_master where reason_name =" +label, null); 


     while (c.moveToNext()){ 

     rc = c.getString(c.getColumnIndex("reason_code")); 

     } 
}catch (SQLiteException se) { 
Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
    } 

    } 
@Override 
public void onNothingSelected(AdapterView<?> parent) { 
     } 
} 
} 

Я попробовал другие вопросы, но ничего не помогло. Пожалуйста, помогите разобраться.

EDIT здесь моя ошибка журнала

04-07 16:52:23.584: E/AndroidRuntime(4304): FATAL EXCEPTION: main 
04-07 16:52:23.584: E/AndroidRuntime(4304): Process: com.example.sellatease,  PID: 4304 
04-07 16:52:23.584: E/AndroidRuntime(4304): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()'  on a null object reference 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.Spinner.measureContentWidth(Spinner.java:759) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.Spinner.onMeasure(Spinner.java:510) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.View.measure(View.java:17547) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.View.measure(View.java:17547) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.View.measure(View.java:17547) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.View.measure(View.java:17547) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.View.measure(View.java:17547) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
04-07 16:52:23.584: E/AndroidRuntime(4304): at android.view.View.measure(View.java:17547) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.View.measure(View.java:17547) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1148) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
04-07 16:52:23.584: E/AndroidRuntime(4304): at android.view.Choreographer.doFrame(Choreographer.java:550) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.os.Handler.handleCallback(Handler.java:739) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.os.Handler.dispatchMessage(Handler.java:95) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.os.Looper.loop(Looper.java:135) 
04-07 16:52:23.584: E/AndroidRuntime(4304):  at android.app.ActivityThread.main(ActivityThread.java:5254) 
04-07 16:52:23.584: E/AndroidRuntime(4304): at java.lang.reflect.Method.invoke(Native Method) 
04-07 16:52:23.584: E/AndroidRuntime(4304): at java.lang.reflect.Method.invoke(Method.java:372) 
04-07 16:52:23.584: E/AndroidRuntime(4304): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
04-07 16:52:23.584: E/AndroidRuntime(4304): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

'indate.matches (" ")' not like this do like 'if (indate == null)' –

ответ

0
if(odate.matches("") && indate.matches("")){ 

Здесь вы сопоставления строки с пустыми. Сначала убедитесь, что эти строки не являются нулевыми, а затем проверьте, имеет ли значение значение или нет.

+0

Я пробовал это, но получаю ошибку «java.lang.NullPointerException: попытка вызвать виртуальный метод» boolean java.lang.String.matches (java.lang.String) 'на ссылке нулевого объекта " – Bivin

+0

@Bivin crashOveride добавил пример кода, что я имею в виду в своем ответе. – Srinivasan

0

ли

if(!TextUtils.isEmpty(odate) || !TextUtils.isEmpty(indate) { 
     // go to activity 
    } else { 
     // show dialog 
    } 

Вы можете прочитать больше о Textutils http://developer.android.com/reference/android/text/TextUtils.html

+0

Обратите внимание, что 'TextUtils.isEmpty (String)' возвращает 'false' для пространственных строк. Строки – milosmns

+0

Да. Простые только строки считаются пустыми – crashOveride

+0

Я использовал это too.but без изменений – Bivin

0

изменения if(odate.matches("") && indate.matches("")){ к

if((odate == null || odate.trim.length() < 2) && (indate == null || indate.trim.length() < 2)){ 

конечно вы можете изменить номер 2 на любую длину вам нужно.

Update 1:

из журнала ошибок, я думаю, что ошибка в том, что «метка» переменная равна нуль в строке

final ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, labels); 

Проверьте, возвращает ли функция dbHelper нуля маркировать и добавить проверка перед тем использованием меток как

If(labels !=null){//create adapter here} 
+0

По-прежнему я получаю нулевой указатель exception.the else предложение не exicuting – Bivin

+0

@Bivin проверить мой обновленный ответ –

+0

Я сделал это change.but все же у меня такая же ошибка.что это так? – Bivin

0
if(odate.matches("") && indate.matches("")){ 
} 

заменить выше код

if(odate!=null && indate!=null){ 
    if(odate.matches("") && indate.matches("")){ 
     } 
}else{ 
    // you getting null object 
} 

сначала проверит, имеет ли ваш строковый объект значение null, если его значение не имеет значения null, после чего оно попытается вызвать функцию математического ввода.

+0

Остается на той же странице – Bivin

+0

, потому что ваш объект null –

+0

Да. Когда он равен нулю, я хочу показать диалоговое окно предупреждения. В противном случае перейдите к следующему действию. – Bivin

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