2017-04-14 15 views
1

私は学校のモバイルアプリケーションを作成するのに参考にデータベースの例を使用しており、問題が発生しています。私はすべての私のフィールドを格納するためにlistViewを使用しています、私はそれを新しいアクティビティで表示させたいと思います。今のところ、EditTextはすべて、メイン画面上に縦に並んでいて、リストビューは画面の最下部に表示されていますが、ボタンをクリックすると別の画面に表示されます。 2番目のアクティビティはすべての情報を正しく表示していますが、メイン画面のlistViewも正しく表示されています。メイン画面でlistViewを取り除こうとすると、動作しません。正しい方向に私を向けるどんな助けも素晴らしいでしょう!次のように私のactivity_mainで新しいアクティビティにデータベース値を渡す

は、私は、画面の下部にあるリストビューを持っている:

<ListView 
    android:id="@+id/contactlist" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

をそして私はまた、私はそれが表示したいと思い、私のactivity_display_databaseレイアウトでそれを宣言した:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <ListView 
     android:id="@+id/contactlist" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 

そして、次のように私は私のメインのXMLファイルからリストビューを削除すると、私は実際にエラーを取得していますどこ私の主な活動は、次のとおりです。

public class MainActivity extends AppCompatActivity { 

    private List<PhoneBook> contactList; 
    private ListView listView; 
    private TextView name, number, address, orderTotal, amountReceived, tip, mileage, grandTotal; 
    private Button add; 
    private PhonebookAdapter adapter; 
    PhoneBookHandler db; 

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

     listView = (ListView) findViewById(R.id.contactlist); 

     db = new PhoneBookHandler(this); 

     contactList = db.getAllContacts(); 

     adapter = new PhonebookAdapter(this, contactList); 
     listView.setAdapter(adapter); 
    } 

    public void onClick(View view){ 

     name = (EditText) findViewById(R.id.name); 
     number = (EditText) findViewById(R.id.number); 
     address = (EditText) findViewById(R.id.address); 
     orderTotal = (EditText) findViewById(R.id.orderTotal); 
     amountReceived = (EditText) findViewById(R.id.amountReceived); 
     tip = (EditText) findViewById(R.id.tip); 
     mileage = (EditText) findViewById(R.id.mileage); 
     grandTotal = (EditText) findViewById(R.id.grandTotal); 

     String cName = name.getText().toString(); 
     String num = number.getText().toString(); 
     String cAddress = address.getText().toString(); 
     String cOrderTotal = orderTotal.getText().toString(); 
     String cAmountReceived = amountReceived.getText().toString(); 
     String cTip = tip.getText().toString(); 
     String cMileage = mileage.getText().toString(); 
     String cGrandTotal = grandTotal.getText().toString(); 

     int id = db.addContact(new PhoneBook(cName, num, cAddress, cOrderTotal, 
              cAmountReceived, cTip, cMileage, cGrandTotal)); 
     contactList.add(new PhoneBook(id, cName, num, cAddress, cOrderTotal, 
            cAmountReceived, cTip, cMileage, cGrandTotal)); 
     adapter.notifyDataSetChanged(); 
    } 


    public void buttonClickFunction(View v) 
    { 
     Intent intent = new Intent(getApplicationContext(), display_database.class); 
     startActivity(intent); 
    } 
} 

私は、データベースエントリがactivity_display_database xmlファイルに表示される場所にコードを取得しようとしていますが、メイン画面には表示されません。メイン画面からlistViewを削除しようとすると、メインのonCreateメソッドでエラーが発生します。あなたの時間をありがとう。私を助けることができる誰でも、私は非常に感謝します!

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.boley.databaseexample/com.example.boley.databaseexample.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
                       at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:158) 
                       at android.app.ActivityThread.main(ActivityThread.java:7224) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 
                       at com.example.boley.databaseexample.MainActivity.onCreate(MainActivity.java:43) 
                       at android.app.Activity.performCreate(Activity.java:6876) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)  
                       at android.app.ActivityThread.access$1100(ActivityThread.java:221)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:158)  
                       at android.app.ActivityThread.main(ActivityThread.java:7224)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
+0

入手したエラーを投稿できますか? – BlackHatSamurai

+0

はい、問題ありません。私はlogcatで私の質問を更新しました。 –

答えて

1

メインリストビューを削除するには、listView.setAdapter(adapter);行のコードを削除する必要があります。 xmlのリストビューを取り除いたときにそのエラーが出る理由は、listview参照を取り除いてからmainメソッドを呼び出すとオブジェクトがnullになるためです。コンパイルエラーが発生しない理由は、同じIDを持つ別のリストビューがあるためです。あなたのような何かにデータベースのXMLであなたのリストビューを変更した場合:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <ListView 
     android:id="@+id/contactlist_database" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 

し、メインの活動のxmlファイルを削除し、コンパイラエラーを取得したいです。これが意味をなされることを願っています。データベース・リスト・ビューのみを設定する場合は、そのリスト・ビューを呼び出して、2番目のアクティビティーでアダプターを設定する必要があります。

+0

私はなぜ私は私のメインのXMLファイルからlistViewをコメントアウトするときにエラーを取得しているのか分かりませんね。私のdisplay_database Javaファイルでは、メインアクティビティのonCreateメソッドの内容をコピーして貼り付けていました。また、listViewの同じid名を持つMainとactivity_display_databaseの両方のXMLファイルがあっても、両方とも正しく機能します。私はちょうど私のメインXMLからlistViewを削除しようとしていますが、それはエラーをスローするときです。 –

+0

メインXMLのリストビューをコメントアウトするときにエラーが表示される理由を教えてください。私はまたそれを解決する方法を教えました。メインXMLでlistviewをコメントアウトし、 'onCreate'メソッドで' listView.setAdapter(adapter) '行をコメントアウトすると、プログラムを実行することができます。メインのXMLでlistviewをコメントアウトすると、ヌル・ポインタの例外が生成されます。これを避けるために、mainの 'oncreate'メソッドの' listView.setAdapter(adapter) 'を取り除きます。 – BlackHatSamurai

+0

あなたの編集が見えなかったのですが、残念です。それは完璧に働いた!それが今私に2週間のナッツを動かしている。私はここに来る前にどこでも答えが見つからないようにしたかっただけです。助けてくれてありがとう! –

0

たとえば、クラスBのクラスAのインスタンスを作成し、オブジェクトを使用してデータを渡します: 次の2つのクラスのクラスを持っている

EDIT:次のように私はlogcatから取得していますエラーがありますAとクラスB

Class A { 
public int id = YourID; 

public int getId() 
    return id; 
} 

そして、あなたはこのようにIDを使用することができる第二のクラスで:

Class B{ 

    A a = new A(); 
    int recievedId = a.getId // Now the id is saved in recievedId attribute   

} 

希望するもの

関連する問題