简体   繁体   中英

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

EditText object is not created, why?

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

This is for an App that extends AsyncTask class. fetchingData is a class that extens AsyncTask class.But it gives error on creating object of 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() . 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);

        ...
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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