【问题标题】:NullPointerException when draw background RelativeLayout绘制背景RelativeLayout时出现NullPointerException
【发布时间】:2013-01-15 14:25:30
【问题描述】:

像这样的愚蠢错误让我发疯,只想为每个视图绘制两种颜色的布局的背景,但我得到了一个 nullPointerException。

XML 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <RelativeLayout
        android:id="@+id/background_areas"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
....

JAVA 文件:

    for (int o = 0; o < areas.size(); o++) {
        LayoutInflater li_area= (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View vArea = li_area.inflate(R.layout.areas_detalles_cpa, null);
        RelativeLayout fondo_area = (RelativeLayout)findViewById(R.id.background_areas);
        if(o%2==0){

NULLPOINTEREXCEPTIONfondo_area.setBackgroundColor(Color.rgb(104, 2, 64));

            }else{
                 fondo_area.setBackgroundColor(Color.rgb(197, 5, 120));
        }
......

Logcat:

01-31 14:11:47.956: W/System.err(12950): java.lang.NullPointerException
01-31 14:11:47.964: W/System.err(12950):    at com.hiberus.campus.cpa.views.AreasEstudiosCPA.cargarListaAreas(AreasEstudiosCPA.java:125)
01-31 14:11:47.964: W/System.err(12950):    at com.hiberus.campus.cpa.views.AreasEstudiosCPA$task.onPostExecute(AreasEstudiosCPA.java:200)
01-31 14:11:47.964: W/System.err(12950):    at com.hiberus.campus.cpa.views.AreasEstudiosCPA$task.onPostExecute(AreasEstudiosCPA.java:1)
01-31 14:11:47.964: W/System.err(12950):    at android.os.AsyncTask.finish(AsyncTask.java:602)
01-31 14:11:47.964: W/System.err(12950):    at android.os.AsyncTask.access$600(AsyncTask.java:156)
01-31 14:11:47.964: W/System.err(12950):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
01-31 14:11:47.964: W/System.err(12950):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-31 14:11:47.964: W/System.err(12950):    at android.os.Looper.loop(Looper.java:137)
01-31 14:11:47.964: W/System.err(12950):    at android.app.ActivityThread.main(ActivityThread.java:4514)
01-31 14:11:47.964: W/System.err(12950):    at java.lang.reflect.Method.invokeNative(Native Method)
01-31 14:11:47.964: W/System.err(12950):    at java.lang.reflect.Method.invoke(Method.java:511)
01-31 14:11:47.964: W/System.err(12950):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
01-31 14:11:47.964: W/System.err(12950):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
01-31 14:11:47.964: W/System.err(12950):    at dalvik.system.NativeStart.main(Native Method)

我是否检查了 id、xml 文件的名称并且一切似乎都很好,正在发生吗?

【问题讨论】:

  • 我编辑我的问题,显示 logcat
  • 把你的完整程序代码朋友...

标签: android nullpointerexception android-relativelayout background-color


【解决方案1】:

我认为您缺少这部分.. 使用 vArea.findViewById() 而不仅仅是 findViewById()

final View vArea = li_area.inflate(R.layout.areas_detalles_cpa, null);
        RelativeLayout fondo_area = (RelativeLayout)vArea.findViewById(R.id.background_areas);

【讨论】:

  • 我要试一试,但我认为这是错误。我不明白我是怎么忘记它的。
【解决方案2】:

检查您的areas_detalles_cpa 布局是否包含fondo_area。另外,请记住,您无法按照您的方式在循环中找到具有相同 ID 的多个视图。

仅当这些视图中只有一个具有该 ID 并且您在循环中执行此操作时,才能通过 ID 查找视图。您可以执行 vArea.findViewById(R.id.background_areas) 来获得您需要的特定视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多