【问题标题】:findviewbyid is giving nullfindviewbyid 给出 null
【发布时间】:2014-10-07 12:24:57
【问题描述】:

我有一个活动和一个布局。我在此布局中包含了一个视图,该视图在所有活动中都很常见,用于显示错误消息。这个通用视图在所有活动中都可以正常工作,但在一个活动中 findviewby id此视图为 null。已经尝试了很多但无法跟踪问题所在。如果有人可以建议我,请查看代码。这里是代码

活动:

public class VerificationCodeActivity extends Activity {

    TextView resend_code,other_numbers;
    EditText vc_code1,vc_code2,vc_code3,vc_code4;
    Button verify_code;
    RelativeLayout error_layout;
    TextView error_textview;
    Button close_error_button;
    Context ctx =this;
    String confirmCode;
    Bundle bundle;
    String usernumber,countrycode,tempid;
    ArrayList<String>other_numebr_list;
    String accessType;


        @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    setContentView(R.layout.verification_code_layout);
    init();
    super.onCreate(savedInstanceState);

}
    void init()
    {
        resend_code = (TextView)findViewById(R.id.vc_resend_button);
        resend_code.setPaintFlags(resend_code.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
        error_textview = (TextView)findViewById(R.id.error_text);

        //here is the layout
        error_layout=(RelativeLayout)findViewById(R.id.error_layout);
        close_error_button= (Button)findViewById(R.id.close_button);
        }
    }
    void showErrorMessage(Boolean showm,String message )
    {

        if(showm)
        {
            error_textview.setText(message);
            CommonUtility.expand(error_layout);
        }
        else{
            CommonUtility.collapse(error_layout);
        }
    }

类 VerifyCode 扩展 AsyncTask {

String response;
Boolean askpin,iserror = false;
String verifiedBy = "2";

@Override
protected void onPostExecute(Void result) {
    // TODO Auto-generated method stub
    if(iserror)
    {
        showErrorMessage(true, response);
    }
    else if(askpin)
    {
        Intent startcreatpin = new Intent(ctx, CreatePasswordActivity.class);
        startcreatpin.putExtra(VariableClass.Vari.VERIFI_CODE,confirmCode);
        startcreatpin.putExtra(VariableClass.Vari.USERID,bundle.getString(VariableClass.Vari.COUNTRYCODE)+bundle.getString(VariableClass.Vari.USERID));
        ctx.startActivity(startcreatpin);
    }
    super.onPostExecute(result);
}

@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    bundle = getIntent().getExtras();
    super.onPreExecute();
}

@Override
protected Void doInBackground(Void... params) {
    // TODO Auto-generated method stub
    JSONObject parent,child;

    response = Apis.getApisInstance(ctx).verifyCode(bundle.getString(VariableClass.Vari.USERID), bundle.getString(VariableClass.Vari.COUNTRYCODE), Prefs.getResellerID(ctx), confirmCode, "2");

    if(!response.equalsIgnoreCase(""))
    {
        try {
            parent=new JSONObject(response);
            //if response of failed show message
            if(parent.getString(VariableClass.ResponseVariables.RESPONSE).equals(Apis.ErrorResponse))
            { 
                iserror = true;
                child= parent.getJSONObject(VariableClass.ResponseVariables.RESPONSEMESSAGE);
                response= child.getString(VariableClass.ResponseVariables.ERRORMESSAGE);
            }
            //if response of success send to create pin
            if(parent.getString(VariableClass.ResponseVariables.RESPONSE).equals(Apis.SuccessResponse))
            { 
                //hit verifiedsignup

                if(!tempid.equals(""))
                {
                    response = Apis.getApisInstance(ctx).verifiedsignup(verifiedBy, Prefs.getResellerID(ctx), bundle.getString(VariableClass.Vari.TEMP_ID),Prefs.getUserTariff(ctx));
                    if(!response.equals("")){
                        askpin= true;

                    }
                    else
                    {
                        iserror = true;
                        response= getResources().getString(R.string.server_error);
                    }
                }
            }

        } catch (JSONException e) {
            iserror=true;
            response=getResources().getString(R.string.parse_error);
            e.printStackTrace();
        }
    }
    else{
        iserror=true;
        response=getResources().getString(R.string.server_error);
    }

    return null;
}

} }

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:orientation="vertical"
    android:padding="@dimen/padding_all" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/vc_text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_top"
            android:padding="1dp"
            android:text="@string/vc_message"
            android:textColor="@android:color/white" />

        <include
            android:id="@+id/vc__em_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_top"
            layout="@layout/error_message_layout"
            android:visibility="gone" />

        <LinearLayout
            android:id="@+id/vc_code_layout"
            android:layout_width="fill_parent"
            android:layout_height="@dimen/edit_box_height"
            android:layout_marginTop="@dimen/margin_top"
            android:background="@drawable/curve_corner_shape_layout" >

            <EditText
                android:id="@+id/vc_code1"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:background="@drawable/curve_corner_shape_edittext"
                android:gravity="center"
                android:hint="X"
                android:inputType="numberDecimal"
                android:maxLength="1"
                android:textColor="@android:color/white"
                android:textSize="@dimen/edit_text_size" />

            <LinearLayout
                android:layout_width="@dimen/partition_line_width"
                android:layout_height="fill_parent"
                android:background="@android:color/white" >
            </LinearLayout>

            <EditText
                android:id="@+id/vc_code2"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:background="@drawable/curve_corner_shape_edittext"
                android:gravity="center"
                android:hint="X"
                android:inputType="numberDecimal"
                android:maxLength="1"
                android:textColor="@android:color/white"
                android:textSize="@dimen/edit_text_size" />

            <LinearLayout
                android:layout_width="@dimen/partition_line_width"
                android:layout_height="fill_parent"
                android:background="@android:color/white" >
            </LinearLayout>

            <EditText
                android:id="@+id/vc_code3"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:background="@drawable/curve_corner_shape_edittext"
                android:gravity="center"
                android:hint="X"
                android:inputType="numberDecimal"
                android:maxLength="1"
                android:textColor="@android:color/white"
                android:textSize="@dimen/edit_text_size" />

            <LinearLayout
                android:layout_width="@dimen/partition_line_width"
                android:layout_height="fill_parent"
                android:background="@android:color/white" >
            </LinearLayout>

            <EditText
                android:id="@+id/vc_code4"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:background="@drawable/curve_corner_shape_edittext"
                android:gravity="center"
                android:hint="X"
                android:inputType="numberDecimal"
                android:maxLength="1"
                android:textColor="@android:color/white"
                android:textSize="@dimen/edit_text_size" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/options"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/vc_othernumber_option"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/margin_top"
                android:layout_weight=".5"
                android:gravity="left"
                android:padding="1dp"
                android:text="@string/other_number"
                android:textColor="@android:color/white"
                android:visibility="gone" />

            <TextView
                android:id="@+id/vc_resend_button"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/margin_top"
                android:layout_weight=".5"
                android:gravity="right"
                android:padding="1dp"
                android:text="@string/resend"
                android:textColor="@android:color/white" />
        </LinearLayout>

        <Button
            android:id="@+id/vc_verifycode_button"
            android:layout_width="fill_parent"
            android:layout_height="@dimen/button_height"
            android:layout_below="@id/options"
            android:layout_marginTop="@dimen/margin_top"
            android:background="@drawable/button_selector"
            android:text="@string/verify_text"
            android:textColor="@android:color/white"
            android:textSize="@dimen/button_text_size" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_top"
            android:background="@drawable/logo_s" />
    </LinearLayout>

</RelativeLayout>

包括布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/error_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/curve_corner_shape_errormsg"
    android:gravity="center_vertical"
    android:paddingBottom="@dimen/padding_bottom_em"
    android:paddingLeft="@dimen/padding_left_em"
    android:paddingRight="@dimen/padding_right_em"
    android:paddingTop="@dimen/padding_top_em" >

    <TextView
        android:id="@+id/error_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:gravity="left|center_vertical"
        android:paddingRight="@dimen/right_padding_em"
        android:text="Invalid userName"
        android:textColor="@android:color/white"
        android:textSize="@dimen/textsize_em" />

    <Button

        android:id="@+id/close_button"
        android:layout_width="@dimen/close_button_width"
        android:layout_height="@dimen/close_button_height"
        android:layout_marginTop="@dimen/close_button_margin_top"
        android:layout_alignParentRight="true"
        android:background="@drawable/close" />

</RelativeLayout>

方法 //打印为真 public static void expand(final View v) {

Boolean b=false;
if(v==null)
{
    b=true;
}
Log.e("check if view is null",""+b);
v.measure(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
final int targtetHeight = v.getMeasuredHeight();

v.getLayoutParams().height = 0;
v.setVisibility(View.VISIBLE);
Animation a = new Animation()
{
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        v.getLayoutParams().height = interpolatedTime == 1
                ? LayoutParams.WRAP_CONTENT
                        : (int)(targtetHeight * interpolatedTime);
        v.requestLayout();
    }

    @Override
    public boolean willChangeBounds() {
        return true;
    }
};

// 1dp/ms
a.setDuration((int)(targtetHeight / v.getContext().getResources().getDisplayMetrics().density));
v.startAnimation(a);

}

日志:

10-07 17:44:04.430: E/AndroidRuntime(22640): java.lang.NullPointerException
10-07 17:44:04.430: E/AndroidRuntime(22640):    at commonUtilities.CommonUtility.expand(CommonUtility.java:86)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at com.phone91new.VerificationCodeActivity.showErrorMessage(VerificationCodeActivity.java:244)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at com.phone91new.VerificationCodeActivity$VerifyCode.onPostExecute(VerificationCodeActivity.java:264)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at com.phone91new.VerificationCodeActivity$VerifyCode.onPostExecute(VerificationCodeActivity.java:1)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at android.os.AsyncTask.finish(AsyncTask.java:631)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at android.os.Looper.loop(Looper.java:155)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at android.app.ActivityThread.main(ActivityThread.java:5520)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at java.lang.reflect.Method.invokeNative(Native Method)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at java.lang.reflect.Method.invoke(Method.java:511)
10-07 17:44:04.430: E/AndroidRuntime(22640):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)

【问题讨论】:

  • 你不认为这是错误的。 ??setContentView(R.layout.verification_code_layout); init(); super.onCreate(arg0);需要换货
  • VerificationCodeActivity 的第 244 行是什么?
  • @X'Factor 嗨,已经改变了,但仍然会出现同样的错误
  • @Bansal_Sneha 错误在这里CommonUtility.expand(error_layout);。所以需要展示那个方法。
  • @X'Factor 更新了问题

标签: android android-layout nullpointerexception android-relativelayout


【解决方案1】:

首先在onCreate 方法中编写超级构造函数,如下所述在您的活动类中

super.onCreate(arg0); 
setContentView(R.layout.verification_code_layout);
init();

希望对您有所帮助,在xml

 <LinearLayout
                android:id="@+id/vc__em_layout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/margin_top"
                android:visibility="gone" >

                <include layout="@layout/error_message_layout" />
  </LinearLayout>

【讨论】:

    【解决方案2】:

    使用&lt;include&gt; 标记包含布局时,您在include 元素中指定的任何属性都会覆盖包含布局的根元素的属性。

    在你的情况下,

    <include 
        android:id="@+id/vc__em_layout"
    

    覆盖 id

    <RelativeLayout 
        android:id="@+id/error_layout"
    

    并且无法使用R.id.error_layout 找到该视图。

    【讨论】:

      【解决方案3】:

      在java中super是用来调用父类构造函数的,所以首先需要调用Activity类的构造函数

           super.onCreate(Bundle_object);
      

      还有一点是 onCreate() 是初始化生命周期组件,所以你需要使用

        super and this
      

      两个关键字作为构造函数的第一行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        • 2016-09-18
        相关资源
        最近更新 更多