android – NullPointerException在TextView.checkForRelayout(),而setText()

android – NullPointerException在TextView.checkForRelayout(),而setText(),第1张

概述我试图实现ViewHolder模式,以便在绘图上绘制地图时提高性能. 我需要为我的标记创建一些标签.在draw()中的数据处理中调用此方法 // now we create label view and convert it into bitmapprivate Bitmap createLabelBitmap(GisLaborHistoryObject object, HistoryPoint 我试图实现VIEwHolder模式,以便在绘图上绘制地图时提高性能.
我需要为我的标记创建一些标签.在draw()中的数据处理中调用此方法
// Now we create label vIEw and convert it into bitmapprivate Bitmap createLabelBitmap(GisLaborHistoryObject object,HistoryPoint point) {    // create vIEw from xml    if (vh == null) {        vh = new VIEwHolder();        vh.vIEw = inflater.inflate(R.layout.map_gis_history_label,null,false);        vh.tv = (TextVIEw) vh.vIEw.findVIEwByID(R.ID.gislabeltext);    }    // set label content    if (vh.tv != null) {        if (!mSingleLaborHistory) {            String name = "";            name = object.getdisplayname();            if (name == null || "".equals(name))                name = object.getPersonID();            if (name == null || "".equals(name))                name = object.getLaborCode();            if (name == null)                name = "";            vh.tv.setText(name);        } else            vh.tv.setText(point.getChangeDate());    }     // measure resulting vIEw    vh.vIEw.measure(spec,spec);    vh.vIEw.layout(0,vh.vIEw.getMeasureDWIDth(),vh.vIEw.getMeasuredHeight());    Bitmap b = Bitmap.createBitmap(vh.vIEw.getWIDth(),vh.vIEw.getHeight(),Bitmap.Config.ARGB_8888);    canvasToDraw.setBitmap(b);    canvasToDraw.translate(-vh.vIEw.getScrollX(),-vh.vIEw.getScrollY());    vh.vIEw.draw(canvasToDraw);    return b;}

规格是

spec = MeasureSpec.makeMeasureSpec(0,MeasureSpec.UnspecIFIED);

结果是
logcat的:

04-29 17:12:34.057: E/AndroIDRuntime(389): java.lang.NullPointerException 04-29 17:12:34.057: E/AndroIDRuntime(389):     at androID.Widget.TextVIEw.checkForRelayout(TextVIEw.java:5497) 04-29 17:12:34.057: E/AndroIDRuntime(389):     at androID.Widget.TextVIEw.setText(TextVIEw.java:2730) 04-29 17:12:34.057: E/AndroIDRuntime(389):     at androID.Widget.TextVIEw.setText(TextVIEw.java:2598) 04-29 17:12:34.057: E/AndroIDRuntime(389):     at androID.Widget.TextVIEw.setText(TextVIEw.java:2573) 04-29 17:12:34.057: E/AndroIDRuntime(389):     at com.xxx.androID.proj.ui.map.overlays.LaborsMarkerOverlay.createLabelBitmap(LaborsMarkerOverlay.java:164)

我使用的XML布局

<?xml version="1.0" enCoding="utf-8"?><TextVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID"androID:ID="@+ID/gislabeltext"androID:layout_wIDth="wrap_content"androID:layout_height="wrap_content"androID:paddingleft="2dp"androID:paddingRight="2dp" />

可能是这个错误的原因?

解决方法 在看到androID source code在5497行我注意到有一个检查使用mLayoutParams.我在调试模式下看起来就是这样,真的是空的!
我添加明确设置此参数的行.现在一切正常
vh.tv = (TextVIEw) vh.vIEw.findVIEwByID(R.ID.gislabeltext);vh.tv.setLayoutParams(new VIEwGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

我的错误是,当使用VIEwGroup膨胀时,我必须显式设置LayoutParams root = null;一切正常,直到我尝试重用TextVIEw乘法时间.

总结

以上是内存溢出为你收集整理的android – NullPointerException在TextView.checkForRelayout(),而setText()全部内容,希望文章能够帮你解决android – NullPointerException在TextView.checkForRelayout(),而setText()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1133819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存