16

Ricevo un'eccezione di puntatore nullo casualmente, di solito funziona e talvolta si arresta, ho cercato molto ma non ottenere alcun aiuto in quanto non vi è alcuna linea corretta da dove ho ricevuto aiuto,Tentativo di invocare il metodo virtuale 'int android.text.Layout.getLineCount()' su un riferimento oggetto nullo

sto usando anche gestore con esso.

mio errore logcat è la seguente e si aggiunge il codice sotto di essa,

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.text.Layout.getLineCount()' on a null object reference 
at android.widget.TextView.onMeasure(TextView.java:6703) 
at android.view.View.measure(View.java:17547) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
at android.view.View.measure(View.java:17547) 
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
at android.view.View.measure(View.java:17547) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
at android.view.View.measure(View.java:17547) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
at android.view.View.measure(View.java:17547) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
at android.view.View.measure(View.java:17547) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
at android.view.View.measure(View.java:17547) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615) 
at android.view.View.measure(View.java:17547) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1173) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
at android.view.Choreographer.doFrame(Choreographer.java:550) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Questo è il mio codice come segue, qui di solito in crash al clic del registro o il pulsante dimenticare sulla prima installazione e dopo che di solito funziona bene, ma a volte mi dà errore,

public class Login extends AppCompatActivity implements View.OnClickListener,ProcessedResult 
{ 
    private Handler uiThreadHandler; 
    private Context context; 
    private EditText ed_password,ed_Username; 

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

     StorageManager storageManager=new StorageManager(this,"abc"); 
        String accessTokenCheck=storageManager.getValue(Constants.SharedPreferences.LACCESSTOKEN, null); 
     if(accessTokenCheck!=null) 
         GeneralFunctions.moveToNextActivity(MainActivity.class,this); 

     uiThreadHandler = new UIThreadHandler(); 
     new Thread(new Runnable() { 
     @Override 
     public void run() { 
      init(); 
     } 
     }).start(); 
     } 

     //Initialization part 
     private final void init() 
     { 
      context=this; 

      FontsManager.initFormAssets(this, "fonts/Lato-Regular.ttf"); 
      FontsManager.changeFonts(this); 

      TextView myTextView = GeneralFunctions.findViewByIdAndCast(this, R.id.login_tv_noAccount); 
      myTextView.setMovementMethod(new LinkTouchMovementMethod()); 
        myTextView.setHighlightColor(getResources().getColor(android.R.color.transparent)); 
      SpannableString mySpannable = new SpannableString(myTextView.getText().toString()); 

      TouchableSpan touchableSpan = new TouchableSpan(Color.parseColor("#606060"),getResources().getColor(R.color.colorBlue),Color.TRANSPARENT) { 
      @Override 
      public void onClick(View textView) { 
          GeneralFunctions.simpleMoveToNextActivity(Register.class, context); 
         } 
        }; 

      mySpannable.setSpan(touchableSpan, GeneralFunctions.getText(myTextView).indexOf("Register"), GeneralFunctions.getText(myTextView).length(), 0); 
      myTextView.setText(mySpannable, TextView.BufferType.SPANNABLE); 

      TextView tv_forgetPassword = GeneralFunctions.findViewByIdAndCast(this,R.id.login_tv_foregetPassword); 
        GeneralFunctions.setTextColorSelector(Color.parseColor("#606060"),getResources().getColor(R.color.colorBlue),tv_forgetPassword); 
        tv_forgetPassword.setOnClickListener(this); 

      ed_password = (EditText) findViewById(R.id.login_ed_password); 
      ed_Username = (EditText) findViewById(R.id.login_ed_usrName); 
      ed_password.setTransformationMethod(new AsteriskPasswordTransformationMethod()); 

      Button bt_Login= GeneralFunctions.findViewByIdAndCast(this,R.id.login_bt_signin); 
        setSelector(R.drawable.big_green_btn_normal, bt_Login); 

      Button bt_linkedInd= GeneralFunctions.findViewByIdAndCast(this,R.id.login_bt_linkedin); 
        setSelector(R.drawable.big_blue_btn_normal, bt_linkedInd); 
      } 

      private final void setSelector(final int resourceId,final Button button) 
      { 
       button.setOnClickListener(this); 
       try 
       { 
       String name = getNameofResyrce(activity,resourceId); 
       String newString=name.replace("normal","pressed"); 

       StateListDrawable states = new StateListDrawable(); 
       states.addState(new int[] {android.R.attr.state_pressed}, getDrawablebyName(activity,newString)); 
       states.addState(new int[] {android.R.attr.state_focused},getDrawablebyName(activity, newString)); 
       states.addState(new int[]{}, getDrawablebyName(activity, name)); 
       if(view instanceof Button) 
        ((Button)view).setBackground(states); 
       else 
        if(view instanceof ImageView) 
         ((ImageView)view).setImageDrawable(states); 
       } catch (Exception e) 
       { 
       } 
      } 


       public static synchronized Drawable getDrawablebyName(Context context,String name) 
       { 
        Resources resources = context.getResources(); 
        final int resourceId = resources.getIdentifier(name, "drawable", context.getPackageName()); 
        return resources.getDrawable(resourceId); 
       } 

       @Override 
       public void onClick(View v) { 
        switch (v.getId()) 
        { 
         case R.id.login_bt_linkedin: 
         { 
          DWebView transparentDialog = DWebView.newInstance(); 
          showProgressDialog(transparentDialog, Constants.DialogConstants.WEB); 
         } 
         break; 
         case R.id.login_bt_signin: 
          uiThreadHandler.sendEmptyMessage(Constants.ActivityBasicsCode.VALIDATION); 
          break; 
         case R.id.login_tv_foregetPassword: 
          GeneralFunctions.simpleMoveToNextActivity_Without_history(ForgetPassword.class, context); 
          break; 
        } 
       } 

     //Listener part 
       @Override 
       public <IResponse, IMethod> void processedResult(IResponse iResponse, IMethod iMethod) { 
        switch (iMethod.toString()) 
        { 
         case "back": 
          finish(); 
          break; 
         case "showProgress": 
         uiThreadHandler.sendEmptyMessage(Constants.ActivityBasicsCode.SHOWDIALOG); 
          break; 
         case "hideProgress": 
          uiThreadHandler.sendEmptyMessage(Constants.ActivityBasicsCode.HIDEDIALOG); 
          break; 
        } 
       } 


     //Handler part 
       private class UIThreadHandler extends Handler { 
        @Override 
        public void handleMessage(Message msg) 
        { 
         switch (msg.what) { 
          case Constants.ActivityBasicsCode.SETERROR: 
          { 
           CustomException exception=(CustomException)msg.obj; 
           TextView editText=exception.getTextView(); 
           editText.setError(exception.getMessage()); 
           editText.setFocusable(true); 
           editText.requestFocus(); 
          } 
          break; 
          case Constants.ActivityBasicsCode.HIDEDIALOG: 
           hideProgressDialog(Constants.DialogConstants.Transparent); 
           break; 
          case Constants.ActivityBasicsCode.SHOWDIALOG: { 
           DTDialog dtDialog=DTDialog.newInstance(); 
           showProgressDialog(dtDialog,Constants.DialogConstants.Transparent); 
          } 
          break; 
          case Constants.ActivityBasicsCode.VALIDATION: { 
    //Here validation is done in separate thread 
           new Thread(new Runnable() { 
            @Override 
            public void run() { 
             try 
             { 
              if (Validation.validate(Login.this)) 
               GeneralFunctions.moveToNextActivity(MainActivity.class, context); 
             } catch (CustomException e) 
              { 
    //Catch exception for validation is thrown here 
               Message message = uiThreadHandler.obtainMessage(Constants.ActivityBasicsCode.SETERROR); 
               message.obj=e; 
               uiThreadHandler.sendMessage(message); 
              }finally { 
               uiThreadHandler.sendEmptyMessage(Constants.ActivityBasicsCode.HIDEDIALOG); 
              } 
             } 
            }).start(); 
            break; 
           } 
          } 
          super.handleMessage(msg); 
         } 
        } 

       public final<T extends DialogFragment> void showProgressDialog(T currentDialog,String tagName) 
       { 
        FragmentManager fragmentManager =getSupportFragmentManager(); 
        currentDialog.show(fragmentManager, tagName); 
       } 

       public final void hideProgressDialog(String tagName) 
       { 
        FragmentManager fragmentManager =getSupportFragmentManager(); 
        DialogFragment transparentDialog = (DialogFragment)fragmentManager.findFragmentByTag(tagName); 
        if (transparentDialog == null) { 
         return; 
        } 
        transparentDialog.dismiss(); 
       } 
      } 

file XML

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:layout_gravity="center" 
    android:gravity="center"> 

    <ImageView style="@style/imageview" 
     android:layout_marginTop="@dimen/_7sdp" 
     android:src="@mipmap/ic_launcher"/> 

    <EditText 
     android:tag="@string/login_emailId_phone" 
     android:layout_marginTop="@dimen/_12sdp" 
     style="@style/edittext" 
     android:drawableLeft="@drawable/user_icon" 
     android:id="@+id/login_ed_emailPhone" 
     android:inputType="text"/> 

    <EditText 
     android:tag="@string/login_password" 
     android:layout_marginTop="@dimen/_12sdp" 
     android:drawableLeft="@drawable/password_icon" 
     android:id="@+id/login_ed_password" 
     android:inputType="textPassword" 
     android:hint="@string/login_password" 
     style="@style/edittext"/> 

    <TextView 
     android:layout_marginTop="@dimen/_11sdp" 
     android:id="@+id/login_tv_foregetPassword" 
     android:text="@string/login_forgetPassword" 
     style="@style/textView" 
     android:textColor="#606060" 
     android:textStyle="normal"/> 

    <Button 
     android:layout_marginTop="@dimen/_30sdp" 
     android:id="@+id/login_bt_signin" 
     style="@style/button" 
     android:text="@string/login_singin" 
     android:background="@drawable/big_green_btn_normal" 
     /> 

    <cl.tempclick.ui.custom_view.LineThroughTextView 
     android:layout_marginTop="@dimen/_12sdp" 
     app:android_textColor="#606060" 
     android:gravity="center" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:lineHeight="@dimen/_2sdp" 
     app:lineColor="@color/colorGray" 
     app:android_textSize="@dimen/_15sdp" 
     app:android_text="@string/login_or" 
     app:textPadding="@dimen/_10sdp"/> 

    <Button 
     android:layout_marginTop="@dimen/_12sdp" 
     android:id="@+id/login_bt_linkedin" 
     style="@style/button" 
     android:text="@string/login_linkedin" 
     android:background="@drawable/big_blue_btn_normal" 
     /> 

    <TextView 
     android:layout_marginTop="@dimen/_12sdp" 
     android:id="@+id/login_tv_noAccount" 
     android:text="@string/login_noAccount" 
     style="@style/textView" 
     android:textStyle="normal" 
     android:textColor="#606060" 
     android:layout_marginBottom="@dimen/_7sdp"/> 

</LinearLayout> 
<ViewStub 
    android:id="@+id/login_vs_empty" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:gravity="center" 
    android:layout="@layout/empty_view" /> 

+0

mostra il codice della tua attività invocata – mangusta

+0

è un 'java.lang.NullPointerException' che significa che stai tentando di utilizzare un oggetto o un widget che non è ancora stato inizializzato. mostra il tuo codice –

+0

condividi il tuo codice se vuoi aiuto – AnswerDroid

risposta

0

Non si dovrebbe essere chiamando init() (o alcun codice che tocca il Android UI) in un thread non-UI.

+0

che non ha fatto alcuna differenza – TheReprator

-1

Provare il metodo thread.join(), in cui si chiama il metodo init().

-1

penso che l'errore è venuto da questa linea

mySpannable.setSpan(touchableSpan, GeneralFunctions.getText(myTextView).indexOf("Register"), GeneralFunctions.getText(myTextView).length(), 0); 

prova logout si ottiene il valore di indice di testo & TextView da gettext (TextView) Metodo & indexOf().

+0

@Moblie Application Develo, grazie per la risposta, ma puoi elaborarlo come evento se è dovuto a qualcosa quindi ci deve essere qualche numero di riga nel registro delle eccezioni cat ... e come ho detto è casuale. a volte funziona e qualche volta si arresta. – TheReprator

+0

posso vedere il tuo codice GeneralFunctions a gettext & indexof.? –

+0

Si tenta di passare il valore statico in lunghezza e controllare mySpannable.setSpan (touchableSpan, 0, myTextView.getText(). Length(), 0); –