Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >尝试对null对象引用调用虚方法“int android.text.Layout.getLineCount()”

尝试对null对象引用调用虚方法“int android.text.Layout.getLineCount()”
EN

Stack Overflow用户
提问于 2015-11-23 05:17:44
回答 3查看 6.7K关注 0票数 29

我是随机得到空指针异常,通常它工作,有时它崩溃,我已经搜索了很多,但没有得到任何帮助,因为它没有适当的行,我从哪里得到任何帮助,

我也对它使用了handler。

我的logcat错误如下所示,下面添加了代码。

代码语言:javascript
运行
AI代码解释
复制
 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)

这是我的代码如下,在这里它通常崩溃点击注册或忘记按钮在第一次安装,然后它通常工作良好,但有时它给我错误,

代码语言:javascript
运行
AI代码解释
复制
 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文件

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>

代码语言:javascript
运行
AI代码解释
复制
<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" />

EN

回答 3

Stack Overflow用户

发布于 2019-02-20 11:21:25

你必须在 textview 测量之后调用 textview getLayout(),所以最好调用 getLayout()

代码语言:javascript
运行
AI代码解释
复制
textview.post(new Runnable() {
    @Override
    public void run() {
        textview.getLayout()....
    }
});
票数 1
EN

Stack Overflow用户

发布于 2015-11-27 06:56:51

尝试调用init()方法的thread.join()方法。

票数 -1
EN

Stack Overflow用户

发布于 2015-11-30 05:43:32

我想错误来自这一行

代码语言:javascript
运行
AI代码解释
复制
mySpannable.setSpan(touchableSpan, GeneralFunctions.getText(myTextView).indexOf("Register"), GeneralFunctions.getText(myTextView).length(), 0);

尝试注销时,您将从gettext( textview ) & indexOf()方法获得索引值&textview text。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33864160

复制
相关文章
为自己的APP添加启动页
打开APP的时候会有一个启动过程 ,为了较好的体验,一般加载一个启用页(有的是广告······)。 最熟悉的打开微信时候一个地球图片,这篇文章简单介绍怎么加载该图片。
小尘哥
2018/08/15
6410
为自己的APP添加启动页
JavaScript中给 iframe 中的元素添加点击事件
最近在开发一个浏览器插件,需要抓取掌中云平台的数据,由于该平台的页面结构是采用iframe嵌套的方式加载的, 所以在添加事件的时候遇到了一点小麻烦,现特此将解决方法记录如下,以供大家复制粘贴。
越陌度阡
2022/11/27
3.7K0
为精灵添加触摸事件
  这可能是游戏中最普通的场景了:点击某个精灵,触发此精灵的一系列动作。比如:精灵是一块石头,触摸石头后,让石头从A点移动到B点。
古时的风筝
2022/05/11
6030
为iFrame添加动态载入效果,提高用户体验
中国博客联盟-成员展示导航一直都是直勾勾的加载,并且未加载完成之前还会强行占据一大片空白区域,体验很不友好!昨天在制作展示导航 WordPress 插件时,把这个问题也一并处理了,其中涉及到了这个 i
张戈
2018/03/23
2.2K0
关于IFRAME的onload事件
昨天遇到一个关于iframe的问题,比如a页面中嵌入了一个iframe称为a_iframe,如果直接在a_iframe的标签上直接加入属性的设置,οnlοad=’’,这样才onload事件才是起作用的,网上打听了下,具体原因不明,但是是有解决方法的:
全栈程序员站长
2022/07/07
1.5K0
为treeview添加客户端事件
在使用TreeView控件时,要想取得选种的节点的信息需要返回服务器,这样的话就加重了服务器的负担。 如果仅仅是为了取的选种节点的信息,其实根本没有必要返回服务器,在客户端也可以的。 .CS文件: TreeNode nodeF = new TreeNode(); nodeF.ID = drKs[0].ToString()+"\" onclick=\"javascript:node_click('"+drKs[0].ToString()+"');"; //关键就在加红的这段代码。 nodeF.Te
用户1075292
2018/01/23
1.3K0
【HTML】Iframe中的onload事件
当iframe.src重新指定一个url时会重新执行iframe的onload事件 <iframe id="indexFrame" name="index" width="800" onload='iFrameHeight("indexFrame");'                 frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> html生成时,会执行iframe中的onload事件 当iframe.sr
悟空聊架构
2018/05/18
3.5K0
VB.NET 为Treeview控件每个节点绑定独立的事件
  TreeView树状控件,在日常开发中我们会经常用到,但是我们在使用的过程中,想要点击某个节点触发某个过程方法;我们(哦不,是我自己)日常的做法,是使用节点点击事件(NodeMouseClick或者AfterSelect)去根据节点名称Name或者节点Text逐一判断然后触发某个过程,不能把每个节点当作一个按钮来操作;
办公魔盒
2021/07/23
1.6K0
为 Web 页面添加 iPhone 固定标签页的图标
2017-10-27 16:16
walterlv
2018/09/18
1.1K0
为 Web 页面添加 iPhone 固定标签页的图标
SAP MM MIGO界面上的Freight标签页
这是笔者玩SAP系统十多年来第一次知道的,就在今天,就在刚刚。自然引起了笔者强烈的好奇心。经过上网查资料,得到了一些有用的信息,整理成本文,算是做一个学习笔记吧!
SAP虾客
2022/01/25
8080
SAP MM MIGO界面上的Freight标签页
为已有点击事件的dom元素添加点击事件,并控制事件函数执行的顺序
我们大家都知道,一个dom的事件流程是先经过事件捕获,然后到事件本身,最后是事件冒泡
拿我格子衫来
2022/01/24
2.5K0
为已有点击事件的dom元素添加点击事件,并控制事件函数执行的顺序
为typecho文章页添加百度收录检测 2.0
在post.php中添加 <script> function baidu_check(){ var url= window.loca
云计算小黑
2022/12/28
2340
ios中iframe的scroll滚动事件替代方法
在公众号的开发中,遇到ios中iframe的scroll滚动事件失效,在此做下记录。 因为接口获取的数据必须放在iframe中展示,滚动到底部按钮变亮,如图: 代码如下: <!DOCTYPE html
deepcc
2018/05/16
2.8K0
原生js怎么为动态生成的标签添加各种事件
这几天用zepto.js写了不少事件,突然想到一个问题,那就是原生的js如何给动态生成的标签添加事件?因为这些标签都是后来通过ajax或者运行其他点击事件生成的,那么如果之前给他们写事件他们这个dom对象是找不到的,jq通过事件委托解决了这个问题,但是原生js这个问题该怎么解决呢?我在网上查了很多资料,好像只有一种办法,那就是在生成标签并把标签添加到html结构中后再添加对于这个新标签的各种事件,如果有更好的方法,欢迎提出来。 <!DOCTYPE html> <html lang="en"> <head>
吴裕超
2018/02/28
8.1K0
完善dedecms站内搜索代码,为搜索结果添加第*页
  自那些平凡而伟大的程序猿开发了内容管理系统(cms),为了让看客们更快地找到自己感兴趣的内容,他们不断完善站内搜索代码,形成了一个小型的站内搜索引擎。可能有些网站模板设计师没考虑到seo的问题,很多站内搜索结果列表页面标题都是一样,造成很多重复页面,虽然可以屏蔽蜘蛛访问搜索结果页面。
ytkah
2022/03/14
2.2K0
为wordpress分类、页面和标签页固定链接添加.html后缀
大家可能都知道,通过设置固定链接格式,可将wordpress日志URL设置成伪静态的形式。
陌涛
2019/05/22
2.4K0
为wordpress分类、页面和标签页固定链接添加.html后缀
大家可能都知道,通过设置固定链接格式,可将wordpress日志URL设置成伪静态的形式。-suffix.html
星哥玩云
2022/08/13
1.5K0
点击加载更多

相似问题

jQuery iframe load()事件?

71

在iframe的load事件之后?

10

Firefox中Iframe的Load事件

10

停止iframe的jQuery load()事件

20

页面上每个iframe的线程

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档