16

ヌルポインタ例外がランダムに発生しています。通常は動作し、いつかクラッシュしますが、私は助けを得るから適切な行がないので、どんな助けも手に入れてください。ヌルオブジェクト参照で仮想メソッド 'int android.text.Layout.getLineCount()'を呼び出そうとしました

私はまた、それと一緒にハンドラを使用しています。

マイlogcatエラーが次のようにこれは私のコードで、ここでは通常、レジスタのクリック時にクラッシュしたり、最初の通常それをインストールし、その後のボタンを忘れて次のようになり、コードがその下に追加され、

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) 

正常に動作しますが、いつかそれは私にエラーを与え、

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(); 
       } 
      } 

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

呼び出されたアクティビティのコード – mangusta

+0

が、まだ初期化されていないオブジェクトまたはウィジェットを使用しようとしていることを示す 'java.lang.NullPointerException'を示しています。あなたのコードを表示します。 –

+0

あなたの助けが必要な場合は、コードを共有してください – AnswerDroid

答えて

0

あなたは非UIスレッドで(AndroidのUIに触れる任意のコードまたはinit()を呼び出すべきではありません。

+0

これは何の違いもありませんでした – TheReprator

-1

init()メソッドを呼び出すthread.join()メソッドを試してください。私はエラーがこの行

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

から来たと思います

-1

あなたは のgettext(のTextView)&のindexOf()メソッドからのインデックス値&のTextViewのテキストを取得ログアウトしてみてください。

+0

@Moblie Application Develo、返事ありがとうございますが、それは事件のためにイベントとしてそれを精緻化することができますし、例外ログcatにいくつかの行番号がなければなりません...と私が言ったようにそれはランダムです。時にはそれは動作し、いつかクラッシュを与えます。 – TheReprator

+0

gettext&indexofにGeneralFunctionsコードが表示されますか? –

+0

長さとチェックで静的な値を渡そうとしています。 mySpannable.setSpan(touchableSpan、0、myTextView.getText()。length()、0); –

関連する問題