2016-05-03 7 views
-1

私は私のプロジェクトでのすべてのエラーを持っていないが、私はそれを実行すると、それはこれらの行とnullポインタ例外エラーを与え、すぐに閉じます。EditTextをどこに置くと、nullpointer例外エラーが発生しなくなるのですか?

EditText nameofcontact = (EditText) findViewById(R.id.edittextname); 
EditText numberofcontact = (EditText) findViewById(R.id.edittextname); 

私はこのエラーが起こっているのはなぜだと思います - Edittextsはそれらが存在する前に言及されていますが、私がonCreateに入れても、私のコードはまだ動作しません。 (これは私のnameofcontactと私のcreatebuttonのcontactof変数の数に問題をもたらします)。

アイデア?私のプロジェクトが正しく機能するように、あるいはどのようなコードを追加すべきか、これらの行をどこに置くべきですか?助けてくれてありがとう。これは、あなたの意見を追加する場所であるため、

package com.example.chris.addnewcontact; 

import android.content.ContentProviderOperation; 
import android.content.ContentResolver; 
import android.content.OperationApplicationException; 
import android.database.Cursor; 
import android.os.RemoteException; 
import android.provider.ContactsContract; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

public String contactname; 
public String contactnumber; 

//the lines below are giving me null pointer exception error. 

EditText nameofcontact = (EditText) findViewById(R.id.edittextname); 
EditText numberofcontact = (EditText) findViewById(R.id.edittextname); 

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

Button add = (Button) findViewById(R.id.createButton); 


} 

public void createButton(View view) { 

contactname = nameofcontact.getText().toString(); 
contactnumber = numberofcontact.getText().toString(); 

Log.d("test","yes, button is working"); 
ArrayList<ContentProviderOperation> contentProviderOperations = new ArrayList<ContentProviderOperation>(); 
//insert raw contact using RawContacts.CONTENT_URI 
contentProviderOperations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build()); 
//insert contact display name using Data.CONTENT_URI 
contentProviderOperations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,nameofcontact).build()); 
//insert mobile number using Data.CONTENT_URI 
contentProviderOperations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, numberofcontact).withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE).build()); 
try { 
//apply the changes 
getApplicationContext().getContentResolver(). 
applyBatch(ContactsContract.AUTHORITY, contentProviderOperations); 
} catch (RemoteException e) { 
e.printStackTrace(); 
} catch (OperationApplicationException e) { 
e.printStackTrace(); 
} 
} 
+0

'setContentView()'の後に 'onCreate()'の内部にあります。 –

+0

静的な方法でfindviewbyidを呼び出すことはできません。コードをonCreateコールの中に入れてください。 –

+0

ありがとうございました。私はRamesh Kumarを正しいものとしてマークしました。なぜなら、実際にはそれは素晴らしく、はっきり言って、文字通りエラーを解決するためにコードをコピーして貼り付けたからです。そして、今、他のすべてのバグに直面する... – CHarris

答えて

2

これが正しい方法です。メソッドビューの外側はコンテキストを見つけることができなかったため初期化できません。

0

最高の場所は、setContentView(R.layout.activity_main);onCreateになります。それらが追加されると、あなたはそれを見ることができます。

アクティビティが作成されたときにそれらのオブジェクトを参照すると、が空になります。そのため、編集テキストはnullのままです。 onCreateコールが、その後、あなたの意見を初期化することができたときに

EditText nameofcontact; 
    EditText numberofcontact; 

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

Button add = (Button) findViewById(R.id.createButton); 
nameofcontact = (EditText) findViewById(R.id.edittextname); 
numberofcontact = (EditText) findViewById(R.id.edittextname); 

} 

0

あなたの活動の方法はonCreate()です。 しかし、アクティビティーの開始時に変数を宣言することができます。

0

あなたの編集テキストフィールドのインスタンス化が、onCreateメソッドで起こらないように見えます。これらのオブジェクトのインスタンス化をonCreateメソッドの本体に移動するには、それらのEditTextの宣言をメソッドから外しておきます。

また、xmlファイルから2つの異なるEditText項目を使用しますインスタンス化する。

1

EditText初期化コードをどこに移すべきかという点については、正解が既に提案されています。具体的には、コードを以下のように変更することができます(コピー&ペースト、テスト、それが動作するかどうかをお知らせください)。 package com.example.chris.addnewcontact;

import android.content.ContentProviderOperation; 
import android.content.ContentResolver; 
import android.content.OperationApplicationException; 
import android.database.Cursor; 
import android.os.RemoteException; 
import android.provider.ContactsContract; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

public String contactname; 
public String contactnumber; 

//the lines below are giving me null pointer exception error. 

EditText nameofcontact ; 
EditText numberofcontact; 

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

Button add = (Button) findViewById(R.id.createButton); 
nameofcontact = (EditText) findViewById(R.id.edittextname); 
numberofcontact = (EditText) findViewById(R.id.edittextname); 

} 

public void createButton(View view) { 

contactname = nameofcontact.getText().toString(); 
contactnumber = numberofcontact.getText().toString(); 

Log.d("test","yes, button is working"); 
ArrayList<ContentProviderOperation> contentProviderOperations = new ArrayList<ContentProviderOperation>(); 
//insert raw contact using RawContacts.CONTENT_URI 
contentProviderOperations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build()); 
//insert contact display name using Data.CONTENT_URI 
contentProviderOperations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,nameofcontact).build()); 
//insert mobile number using Data.CONTENT_URI 
contentProviderOperations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, numberofcontact).withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE).build()); 
try { 
    //apply the changes 
    getApplicationContext().getContentResolver(). 
    applyBatch(ContactsContract.AUTHORITY, contentProviderOperations); 
} catch (RemoteException e) { 
    e.printStackTrace(); 
} catch (OperationApplicationException e) { 
    e.printStackTrace(); 
} 
} 
関連する問題