2014-12-30 5 views
-2

У меня есть несколько строк, и я выполняю некоторую проверку перед использованием значений на диаграммах. Вот мои коды:Java проверяет, является ли строка пустой или пустой

for (int j = 0; j < shareByTypeList.size(); j++) { 
      if (j == 0) { 
       facebookShare = shareByTypeList.get(j).getTotalShare(); 
      } else if (j == 1) { 
       googleplusShare = shareByTypeList.get(j).getTotalShare(); 
      } else { 
       twitterShare = shareByTypeList.get(j).getTotalShare(); 
      } 
     } 

     if (facebookShare != null && !facebookShare.isEmpty() 
       && twitterShare != null && !twitterShare.isEmpty() 
       && googleplusShare != null && !googleplusShare.isEmpty()) { 
      txtDisplayFacebook.setText(facebookShare); 
      txtDisplayTwitter.setText(twitterShare); 
      txtDisplayGooglePlus.setText(googleplusShare); 
      totalShare = Integer.parseInt(facebookShare) 
        + Integer.parseInt(googleplusShare) 
        + Integer.parseInt(twitterShare); 
      txtDisplayShareAmt.setText(String.valueOf(totalShare)); 
     } 

Я проверяю, является ли сама строка пустой или пустой, прежде чем разбирать их в Integer. Тем не менее, я все еще получаю NullPointerException в инструкции if. Когда я пытаюсь распечатать facebookShare, он просто пуст на консоли. Есть идеи?

Заранее спасибо.

Трассировка стека:

12-30 13:53:39.787: E/AndroidRuntime(1787): java.lang.NullPointerException 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at nyp.edu.eneighbourhood.EventDetailChart.onCreateView(EventDetailChart.java:191) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:482) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.view.ViewPager.populate(ViewPager.java:1073) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:555) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at nyp.edu.eneighbourhood.EventDetailMain$2.onTabSelected(EventDetailMain.java:42) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:512) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at com.android.internal.app.ActionBarImpl$TabImpl.select(ActionBarImpl.java:893) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at com.android.internal.widget.ScrollingTabContainerView$TabClickListener.onClick(ScrollingTabContainerView.java:502) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.view.View.performClick(View.java:3620) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.view.View$PerformClick.run(View.java:14292) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.os.Handler.handleCallback(Handler.java:605) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.os.Looper.loop(Looper.java:137) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at android.app.ActivityThread.main(ActivityThread.java:4512) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 
12-30 13:53:39.787: E/AndroidRuntime(1787):  at dalvik.system.NativeStart.main(Native Method) 
12-30 13:53:49.334: I/Process(1787): Sending signal. PID: 1787 SIG: 9 
+2

Вставить трассировки стека? Это должна быть другая строка. – SMA

+0

Первая часть присваивает только 1 из 3 акций. Если 'j == 0' и вы назначаете общий ресурс facebook, будут ли google и twitter равны нулю в if? – csmckelvey

+0

Очень маловероятно, что NPE происходит в инструкции 'if'. Пожалуйста, покажите точную трассировку стека и отметьте свой код соответствующими номерами строк. – NPE

ответ

1

Я решил его путем разделения переменных 3 для выполнения проверки, то установите значение TextView:

if (facebookShare != null && !facebookShare.isEmpty()) { 
      txtDisplayFacebook.setText(facebookShare); 
     } else if (twitterShare != null && !twitterShare.isEmpty()) { 
      txtDisplayTwitter.setText(twitterShare); 
     } else if (googleplusShare != null && !googleplusShare.isEmpty()) { 
      txtDisplayGooglePlus.setText(googleplusShare); 
     } 

     if (!txtDisplayFacebook.getText().equals("0") 
       && !txtDisplayTwitter.getText().equals("0") 
       && !txtDisplayGooglePlus.getText().equals("0")) { 
      totalShare = Integer.parseInt(facebookShare) 
        + Integer.parseInt(googleplusShare) 
        + Integer.parseInt(twitterShare); 
      txtDisplayShareAmt.setText(String.valueOf(totalShare)); 
     } 
Смежные вопросы