简体   繁体   中英

TextView cannot be cast to EditText

First time posting a question to this site so I might make some mistakes!

I'm new to programming and getting the following error when running an application in Android Studio:

java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditText

The code that's causing this issue is

EditText et = (EditText) findViewById(R.id.noteText);

I've tried to delete the R.java files and clean the project but it didn't work, any help solving the problem would be greatly appreciated :)

I can add any other files or relevant code that might be a factor in the problem.

Edit: After changing the code from text view to edit text I'm getting a new error.

Logcat:

08-03 20:08:04.413  29662-29662/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.toshiba.notetakingapp/com.example.toshiba.notetakingapp.NoteEditorActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
            at android.app.ActivityThread.access$700(ActivityThread.java:134)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4867)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.toshiba.notetakingapp.NoteEditorActivity.onCreate(NoteEditorActivity.java:33)
            at android.app.Activity.performCreate(Activity.java:5047)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
            at android.app.ActivityThread.access$700(ActivityThread.java:134)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4867)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
            at dalvik.system.NativeStart.main(Native Method)

The xml file, activity_note_editor:

<?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">

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="New Text"
        android:id="@+id/noteText"
        android:singleLine="false"
        android:gravity="top"
        android:inputType="textMultiLine"
        />
</RelativeLayout>

The file that's giving the error, NoteEditorActivity:

public class NoteEditorActivity extends Activity {

        private NoteItem note;

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




            Intent intent = this.getIntent();
            note = new NoteItem();
            note.setKey(intent.getStringExtra("key"));
            note.setText(intent.getStringExtra("text"));

            EditText et = (EditText) findViewById(R.id.noteText);
            et.setText(note.getText());
            et.setSelection(note.getText().length());
        }
    }

Mainactivity.java:

package com.example.toshiba.notetakingapp;

import android.app.ListActivity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ArrayAdapter;

import data.NoteItem;
import data.NotesDataSource;

import java.util.List;

public class MainActivity extends ListActivity {

    private NotesDataSource datasource;

    List<NoteItem> notesList;

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

        datasource = new NotesDataSource(this);

        refreshDisplay();

    }

    private void refreshDisplay() {
        notesList=datasource.findAll();
        ArrayAdapter<NoteItem> adapter =
                new ArrayAdapter<NoteItem>(this,R.layout.list_item_layout,notesList);
        setListAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_create) {
            createNote();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private void createNote() {
        NoteItem note = NoteItem.getNew();
        Intent intent = new Intent(this,NoteEditorActivity.class);
        intent.putExtra("key",note.getKey());
        intent.putExtra("key",note.getText());
        startActivityForResult(intent,1001);
    }
}

In your xml, change

<TextView
android:id="@+id/noteText"
.../>

to

<EditText
android:id="@+id/noteText"
.../>

Hope this helps.

Edit:

You didn't put 'text' in the intent. :)

Try changing

intent.putExtra("key",note.getKey());
intent.putExtra("key",note.getText());

to

intent.putExtra("key",note.getKey());
intent.putExtra("text",note.getText());

If the view that contains the TextEdit is not showing up (In other words it is not displayed on the screen) it will throw a null pointer. Is the XML that contains this EditText called activity_note_editor?

If all the solutions fail to work. Then kindly do check if you were using TextView or Plain Text. Using TextView and doing so might be the reason.

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