2017-01-10 2 views
0

Я пытаюсь написать ListView с пользовательским адаптером в android.when мой код завершен, я получил 'java.lang.NullPointerException'. Я проверил снова и снова, но не могу исправить эту ошибку.java.lang.NullPointerException в настройке ArrayAdapter в android

это MainActivity код:

package com.example.sayres.myapplication3_listview; 

import android.content.Intent; 
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; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity{ 

private EditText mainActivity_editText_userName, mainActivity_editText_password; 
private Button mainActivity_btn_login, mainActivity_btn_exit; 

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

    initView(); 
} 

private void initView() { 
    mainActivity_editText_userName = (EditText) findViewById(R.id.mainActivity_editText_userName); 
    mainActivity_editText_password = (EditText) findViewById(R.id.mainActivity_editText_password); 
    mainActivity_btn_login = (Button) findViewById(R.id.mainActivity_btn_login); 
    mainActivity_btn_exit = (Button) findViewById(R.id.mainActivity_btn_exit); 

    mainActivity_btn_exit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
    mainActivity_btn_login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      loginprocess(); 
     } 
    }); 
} 



private void loginprocess() { 
    String userName = mainActivity_editText_userName.getText().toString(); 
    String password = mainActivity_editText_password.getText().toString(); 
    Log.i("====>", "UserName= "+ userName+" Passwotd: "+ password); 
    Toast.makeText(getApplicationContext(),userName, Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(getApplicationContext(), HomeActivity.class); 
    startActivity(intent); 
} 
} 

в MainActivity коде я создать намерение для пойти HomeActivity. HomeActivity код:

package com.example.sayres.myapplication3_listview; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ListView; 

import com.example.sayres.myapplication3_listview.adapter.ContactAdapter; 
import com.example.sayres.myapplication3_listview.model.Contact; 

import java.util.List; 

public class HomeActivity extends AppCompatActivity { 
private ListView listViewHome; 
private List<Contact> contacts; 

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

    initViews(); 
} 

private void initViews() { 
    listViewHome = (ListView) findViewById(R.id.listViewHome); 

    for (int i = 0; i < 1000; i++) { 
     int pic = 0; 
     if (i % 2 == 0) { 
      pic = R.drawable.man; 
     } else { 
      pic = R.drawable.female; 
     } 
     contacts.add(createContact("name " + i, "family " + i, "5526576", pic)); 

    } 
    ContactAdapter adapter = new ContactAdapter(this, R.layout.row_contacts_list, contacts); 

    listViewHome.setAdapter(adapter); 

} 

private Contact createContact(String name, String family, String number, int picture) { 
    return new Contact(name, family, number, picture); 
} 
} 

я получил Ошибку в этой строке: contacts.add(createContact("name " + i, "family " + i, "5526576", pic)); этой ошибке at com.example.sayres.myapplication3_listview.HomeActivity.initViews(HomeActivity.java:34) at com.example.sayres.myapplication3_listview.HomeActivity.onCreate(HomeActivity.java:21)

это ContactAdapter расширяет ArrayAdapter код:

package com.example.sayres.myapplication3_listview.adapter; 

import android.content.Context; 
import android.graphics.Color; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

import com.example.sayres.myapplication3_listview.R; 
import com.example.sayres.myapplication3_listview.model.Contact; 

import java.util.List; 

import de.hdodenhof.circleimageview.CircleImageView; 


public class ContactAdapter extends ArrayAdapter<Contact> { 

private Context context; 
private int layout; 
private List<Contact> contacts; 

public ContactAdapter(Context context, int layout, List<Contact> contacts) { 
    super(context, layout, contacts); 
    this.context = context; 
    this.layout = layout; 
    this.contacts = contacts; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rootView = inflater.inflate(layout, null); 


    if (position % 2 == 0){ 
     rootView.setBackgroundColor(Color.parseColor("#12ffff")); 
    }else { 
     rootView.setBackgroundColor(Color.parseColor("#FFFF12")); 

    } 

    /** 
    * set reference from row_contacts_list.xml 
    */ 
    TextView contactList_name = (TextView) rootView.findViewById(R.id.contactList_name); 
    TextView contactList_family = (TextView) rootView.findViewById(R.id.contactList_family); 
    CircleImageView profile_picture = (CircleImageView) rootView.findViewById(R.id.profile_picture); 

    contactList_name.setText(contacts.get(position).getContactName()); 
    contactList_family.setText(contacts.get(position).getContactFamily()); 
    profile_picture.setImageResource(contacts.get(position).getContactPicture()); 

    return rootView; 
} 
} 

мой Контакт класс является простым классом с сеттер и геттер:

package com.example.sayres.myapplication3_listview.model; 


public class Contact { 
private String contactName,contactFamily, contactNumber; 
private int contactPicture; 

public Contact() { 
} 

public Contact(String contactName, String contactFamily, String contactNumber, int contactPicture) { 

    this.contactName = contactName; 
    this.contactFamily = contactFamily; 
    this.contactNumber = contactNumber; 
    this.contactPicture = contactPicture; 
} 

где моя ошибка?

+5

Перед вызовом методов вам необходимо создать экземпляр 'contacts'. –

+0

Я делаю это 'contacts.add (createContact (« name »+ i,« family »+ i,« 5526576 », pic));' в этой строке я получил ошибку –

ответ

3
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 
    // Init the contacts 
    contacts = new ArrayList<Contact>(); 

    initViews(); 
} 
+0

Это work.thanks! –