2017-01-10 9 views
0

Ich versuche, eine ListView mit benutzerdefinierten Adapter in Android zu schreiben.wenn mein Code fertig ist, habe ich 'java.lang.NullPointerException'. Ich habe es immer wieder überprüft, kann diesen Fehler aber nicht beheben.java.lang.NullPointerException in anpassen ArrayAdapter in Android

dies MainActivity Code:

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); 
} 
} 

in MainActivity Code erstellen i Absicht zu HomeActivity gehen. HomeActivity Code:

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); 
} 
} 

Ich habe Fehler in dieser Zeile: contacts.add(createContact("name " + i, "family " + i, "5526576", pic)); diese Fehler at com.example.sayres.myapplication3_listview.HomeActivity.initViews(HomeActivity.java:34) at com.example.sayres.myapplication3_listview.HomeActivity.onCreate(HomeActivity.java:21)

dieser ContactAdapter ist erweitert ArrayAdapter Code:

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; 
} 
} 

meine Kontaktklasse ist eine einfache Klasse mit Setter und Getter:

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; 
} 

wo ist mein Fehler?

+5

Bevor Sie Methoden aufrufen, müssen Sie 'Kontakte' instanziieren. –

+0

Ich mache das 'contacts.add (createContact (" name "+ i," Familie "+ i," 5526576 ", Bild));' In dieser Zeile habe ich Fehler –

Antwort

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

    initViews(); 
} 
+0

Es ist work.thanks! –

Verwandte Themen