简体   繁体   English

如何解决&#39;.MainActivity。 <init> (MainActivity.java:16)&#39;错误?

[英]How to solve the '.MainActivity.<init>(MainActivity.java:16)' error?

EditText object is not created, why? 未创建EditText对象,为什么?

EditText editText=(EditText)findViewById(R.id.edittext); 

This is for an App that extends AsyncTask class. 这是用于扩展AsyncTask类的App。 fetchingData is a class that extens AsyncTask class.But it gives error on creating object of EditText. fetchingData是扩展AsyncTask类的类,但是在创建EditText对象时会出错。

package com.example.zafar.omdb_7;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    String string;
    Button button;
    public static TextView data;
//
    private EditText editText = findViewById ( R.id.edittext );
//
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        data=findViewById(R.id.fetched_data);
        button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
//
            @Override
            public void onClick(View v) {
                //              string = editText.getText ().toString ();

                fetchingData process= new fetchingData();
                process.execute();
            }
        });
    }
} 

Your code should be something like this: 您的代码应如下所示:

package com.example.zafar.omdb_7;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    String string;
    Button button;
    public static TextView data;
//
    private EditText editText;
//
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        data=findViewById(R.id.fetched_data);
        editText = findViewById ( R.id.edittext );
        button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
//
            @Override
            public void onClick(View v) {
                //              string = editText.getText ().toString ();

                fetchingData process= new fetchingData();
                process.execute();
            }
        });
    }
} 

You won't find the view before you set it on the activity. 在活动上设置视图之前,您将找不到它。 I hope this helps. 我希望这有帮助。

You can't use the following: 您不能使用以下内容:

public class MainActivity extends AppCompatActivity {

    // This won't work!
    private EditText editText = findViewById ( R.id.edittext );

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      ...
    }
 }

Because you can't call the findViewById before you set the Activity layout with setContentView() . 因为在使用setContentView()设置Activity布局之前无法调用findViewById It means that you can't find a view if you didn't have the layout yet. 这意味着如果您还没有布局,则无法找到视图。

So, edit your code to something like this: 因此,将您的代码编辑为如下所示:

public class MainActivity extends AppCompatActivity {
    ...
    private EditText mEdtText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Now you have the layout, you can find the view
        mEdtText = findViewById(R.id.edittext);

        ...
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM