2017-03-28 8 views
0

ボタンを介してEditTextからTextViewにデータ(テキスト)を取得できません。 論理はうまくいくはずで、間違いを見つけられません。nullオブジェクト参照で仮想メソッド 'void android.widget.TextView.append(java.lang.CharSequence)'を呼び出そうとしました

"sendMessage(View v)"をトリガーするボタンをクリックするとエラーが表示されます。 「チャット」にテキストを追加することはできませんが、理由はわかりません。

MainActivity.java:

package com.chattr.neonardo.chattr; 

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

public class MainActivity extends AppCompatActivity { 

    TextView chat; 
    EditText message; 
    Button send; 

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

     chat = (TextView) findViewById(R.id.chat); 
     message = (EditText) findViewById(R.id.message); 
     send = (Button) findViewById(R.id.send); 

     Log.d("test", "test2"); 

/*  send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       chat.append("\n" + message.getText().toString()); 
      } 
     });*/ 
    } 

    public void onMatchTap(View v) { 
     Toast myToast = Toast.makeText(getApplicationContext(), R.string.searching, Toast.LENGTH_LONG); 
     myToast.show(); 
     setContentView(R.layout.chat_main); 
     Log.d("test", "test4"); 
    } 

    public void sendMessage(View v) { 
     Log.d("test", "test6"); 
     chat.append("\n" + message.getText().toString()); 
     Log.d("test", "test7"); 
    } 

} 

私はonClickListenerで何かをしようとしましたが、それは私がそれをコメントアウトので、うまくいきませんでした。

main_activity.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.chattr.neonardo.chattr.MainActivity"> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:srcCompat="@drawable/chattr" 
    android:id="@+id/imageView" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<Button 
    android:id="@+id/button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="91dp" 
    android:onClick="onMatchTap" 
    android:text="@string/start_chat" /> 

私はシーンを変更していますので、私は2つの異なるXMLので働いています。

chat_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:weightSum="1"> 

<TextView 
    android:id="@+id/chat" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1.00" 
    android:autoLink="web" 
    android:text="@string/chat_connection" 
    android:visibility="visible" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <EditText 
     android:id="@+id/message" 
     android:layout_width="301dp" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="text" 
     android:text="@string/defaultMessage" /> 

    <Button 
     android:id="@+id/send" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:elevation="0dp" 
     android:onClick="sendMessage" 
     android:text="Send" /> 
</LinearLayout> 

エラーです:

Process: com.chattr.neonardo.chattr, PID: 24340 
java.lang.IllegalStateException: Could not execute method for android:onClick 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
    at android.view.View.performClick(View.java:5637) 
    at android.view.View$PerformClick.run(View.java:22429) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
    at android.view.View.performClick(View.java:5637)  
    at android.view.View$PerformClick.run(View.java:22429)  
    at android.os.Handler.handleCallback(Handler.java:751)  
    at android.os.Handler.dispatchMessage(Handler.java:95)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6119)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.append(java.lang.CharSequence)' on a null object reference 
    at com.chattr.neonardo.chattr.MainActivity.sendMessage(MainActivity.java:47) 
    at java.lang.reflect.Method.invoke(Native Method)  
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
    at android.view.View.performClick(View.java:5637)  
    at android.view.View$PerformClick.run(View.java:22429)  
    at android.os.Handler.handleCallback(Handler.java:751)  
    at android.os.Handler.dispatchMessage(Handler.java:95)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6119)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
+0

最初に 'myToast.show();の後の' setContentView'を削除します –

+0

あなたがしようとしていることは明確ではありません。 「チャット」フィールドはメインレイアウトにはないので、どこでフィールドを取得する予定ですか? – theblitz

+0

@IntelliJAmiyaそれを取り除くと、もうXML(シーン)は変わりません。 –

答えて

1

あなたはonClickメソッド内で新しいアクティビティを開くためにIntentを使用する必要がありますsetContentView(R.layout.chat_main);

を削除します。

Intent intent = new Intent(CurrentActivity.this,NextActivity.class); 
startActivity(intent); 

public void onMatchTap(View v) { 
     Toast myToast = Toast.makeText(getApplicationContext(), R.string.searching, Toast.LENGTH_LONG).show(); 
     Intent intent = new Intent(MainActivity.this,ChatMain.class); 
     startActivity(intent); 
     Log.d("test", "test4"); 
    } 
+0

ChatMain.class私にエラーを与える –

+0

あなたはそれを作成する必要があります。次のアクティビティです。次に、その中にsetContentViewを配置します。 – Hoo

0
chat = (TextView) findViewById(R.id.chat); 

であるべきこのTextViewには、あなたのchat_main.xmlファイルで定義され、あなたはそれがあなたのNullPointerExceptionがを与えるだろう、なぜ自分のメインActivity.thatの中でそれをバインドしてみてください。

+0

しかし、私はそれをどのように修正することになっていますか?別のクラスでメソッド "sendMessage"を実装する必要がありますか? –

+0

あなたのsetContentView(R.layout.activity_main)を変更するだけです。 setContentView(R.layout.chat_activity);に設定します。とchat.setText( "ここにあなたのテキスト") – Akash

関連する問題

 関連する問題