如何解决'.MainActivity。<init>(MainActivity.java:16)'错误?

时间:2019-02-16 04:41:48

标签: java android android-edittext

EditText对象未创建,为什么?

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

这是用于扩展AsyncTask类的应用程序。 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();
            }
        });
    }
} 

2 个答案:

答案 0 :(得分:2)

您的代码应如下所示:

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();
            }
        });
    }
} 

在活动上设置视图之前,您将找不到该视图。我希望这会有所帮助。

答案 1 :(得分:0)

您不能使用以下内容:

public class MainActivity extends AppCompatActivity {

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

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

因为在使用findViewById设置“活动”布局之前无法调用setContentView()。这意味着如果您还没有布局,就找不到视图。

因此,将代码编辑为以下内容:

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);

        ...
    }
}