Я хочу, чтобы мое приложение выглядело так.Я могу получить имена и типы в двух разных массивах, но получаю исключение нулевого указателя в строке, помеченной в code.names и массив типов, получаю значения, как я и предполагал. Я дважды проверил мои файлы макета, один из которых содержит представление списка, а другой - два.текстовое представление. любая помощь была бы весьма заметна ..
package application.test;
import java.util.HashMap;
import android.app.ListActivity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ListView;
public class TestActivity<types, names> extends ListActivity{
int count[];
int typecount[];
ListView lv;
ListViewAdapterrecent lva;
String[] names;
String[] types;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv=(ListView)findViewById(android.R.id.list);
ContentResolver tcr = getContentResolver();
Cursor tcur=tcr.query(ContactsContract.Data.CONTENT_URI, null, null, null, null);
HashMap<Integer, String> typehashmap=new HashMap<Integer, String>();
HashMap<Integer, String> namehashmap=new HashMap<Integer, String>();
if(tcur.getCount()>0)
{
while(tcur.moveToNext())
{
Boolean temp=false;
String nvalues=tcur.getString(tcur.getColumnIndex(ContactsContract.Data.DATA2));
if (Integer.parseInt(nvalues)==1){
String value="home";
temp=true;
String rw=tcur.getString(tcur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
int key=Integer.parseInt(rw);
typehashmap.put(key, value);
}
else if(Integer.parseInt(nvalues)==2)
{
String value="mobile";
temp=true;
String rw=tcur.getString(tcur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
int key=Integer.parseInt(rw);
typehashmap.put(key, value);
}
else
{
String value="work";
temp=true;
String rw=tcur.getString(tcur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
int key=Integer.parseInt(rw);
typehashmap.put(key, value);
}
if(temp==true)
{
tcur.moveToNext();
String rw=tcur.getString(tcur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
int key=Integer.parseInt(rw);
String zvalues=tcur.getString(tcur.getColumnIndex(ContactsContract.Data.DATA2));
namehashmap.put(key, zvalues);
}
}//while
tcur.close();
types= typehashmap.values().toArray(new String[typehashmap.size()]);
names= namehashmap.values().toArray(new String[namehashmap.size()]);
lva=new ListViewAdapterrecent(this,names,types);
lv.setAdapter(lva);
}
}
}
listviewrecent.java.............
package application.test;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class ListViewAdapterrecent extends BaseAdapter{
Activity context;
String[] names;
String[] types;
public ListViewAdapterrecent(Activity context, String[] names, String[] types) {
// TODO Auto-generated constructor stub
this.context=context;
this.names=names;
this.types=types;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return names.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public class viewHolder {
TextView top;
TextView bottom;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
viewHolder holder;
if(convertView==null){
LayoutInflater inflator=context.getLayoutInflater();
convertView=inflator.inflate(R.layout.textviewonly,null);
holder=new viewHolder();
holder.top=(TextView)convertView.findViewById(R.id.toptext);
holder.bottom=(TextView)convertView.findViewById(R.id.bottomtext);
convertView.setTag(holder);
}else{
holder=(viewHolder)convertView.getTag();
}
holder.top.setText(names[position]);
holder.bottom.setText(types[position]);
return convertView;
}
}