Domanda

Sono principiante in Android.Ho avuto un errore NullPointerecXep.

Voglio che la mia attività mi prenda ListView e ogni elenco contiene immagine, il titolo è, ed è una descrizione, Ho letto l'articolo

Non posso capire capire cosa accade al contesto in Mainactivity.java LayoutinFlater ...

Ho usato l'adattatore di base anziché l'arrayadapter.

Aiuta .. Grazie in anticipo.

Qui metto un po 'di codice ...

una imageview, due testisties Personalizzato.xml

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

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/imageView1"
    android:layout_alignParentRight="true"
    android:layout_toRightOf="@+id/imageView1"
    android:text="Descript1" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/img2" />

<TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView2"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="Title1"
    android:textAppearance="?android:attr/textAppearanceMedium" />

 </RelativeLayout>
.

ATTIVITÀ_MAIN.XML, che contiene ListView ..

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" >
  </ListView>

</RelativeLayout>
.

mainactivity.java

package com.example.customadapter;

public class MainActivity extends Activity {

ListView lv;
//Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lv=(ListView) findViewById(R.id.listView1);
    lv.setAdapter(new myAdapter(this));
    //lv.setAdapter(adapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

class SingleRow {
   String title;
   String desc;
   int image;
   SingleRow(String title, String desc, int img){
    this.title=title;
    this.desc=desc;
    this.image=img;
}
}

class myAdapter extends BaseAdapter{
 Context context;
 ArrayList<SingleRow> list;
 myAdapter(Context c){

    list=new ArrayList<SingleRow>();
    /*
     * 1. get the title, descrp, image from xml
     * 2. group each title, its related description and its image into a single row     

object.
     * 3. put single row object into array list.
     * 
     * */
    Resources res=c.getResources();

    String[] title=res.getStringArray(R.array.titles);
    String[] desc=res.getStringArray(R.array.desc);

    int[] img=  

 {R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,R.drawable.img5};

    for(int i=0;i<5;i++) {
        list.add(new SingleRow(title[i],desc[i],img[i]));
    }
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(int position, View row, ViewGroup parent) {
    // TODO Auto-generated method stub

    /*
     1. get the root view
     2. use the root view for find other view
     3. set the view.
     */

    LayoutInflater inflater=(LayoutInflater) 

    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row= inflater.inflate(R.layout.custom_list,null);

    TextView title= (TextView) row.findViewById(R.id.tv1);
    TextView desc=(TextView) row.findViewById(R.id.textView2);
    ImageView img=(ImageView) row.findViewById(R.id.imageView1);

    SingleRow temp=list.get(position);
    title.setText(temp.title);
    desc.setText(temp.desc);
    img.setImageResource(temp.image);

    return null;
}
}
.

Errore ::

07-30 18:34:29.487: E/AndroidRuntime(627): FATAL EXCEPTION: main
07-30 18:34:29.487: E/AndroidRuntime(627): java.lang.NullPointerException
07-30 18:34:29.487: E/AndroidRuntime(627):  at com.example.customadapter.myAdapter.getView(MainActivity.java:108)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.widget.AbsListView.obtainView(AbsListView.java:1430)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.widget.ListView.onMeasure(ListView.java:1127)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.view.View.measure(View.java:8313)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.widget.RelativeLayout.measureChild(RelativeLayout.java:566)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:381)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.view.View.measure(View.java:8313)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.view.View.measure(View.java:8313)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.view.View.measure(View.java:8313)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.view.View.measure(View.java:8313)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.view.ViewRoot.performTraversals(ViewRoot.java:839)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.os.Looper.loop(Looper.java:123)
07-30 18:34:29.487: E/AndroidRuntime(627):  at android.app.ActivityThread.main(ActivityThread.java:3683)
07-30 18:34:29.487: E/AndroidRuntime(627):  at java.lang.reflect.Method.invokeNative(Native Method)
07-30 18:34:29.487: E/AndroidRuntime(627):  at java.lang.reflect.Method.invoke(Method.java:507)
07-30 18:34:29.487: E/AndroidRuntime(627):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-30 18:34:29.487: E/AndroidRuntime(627):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-30 18:34:29.487: E/AndroidRuntime(627):  at dalvik.system.NativeStart.main(Native Method)
07-30 18:39:29.697: I/Process(627): Sending signal. PID: 627 SIG: 9
.

È stato utile?

Soluzione

La variabile di contesto è referenziata come NULL

Nel tuo costruttore non hai usato il contesto dei parametri C

Aggiungi questa linea di codice

context=c;
.

E stai utilizzando il contesto all'interno del metodo getView() che causa anche il puntatore NULL.

Nell'adattatore personalizzato, getView() restituisce null che attiva l'eccezione del puntatore NULL.Devi restituire il view gonfiato;

Sostituisci

return null;
.

con

return row;
.

Altri suggerimenti

Non hai utilizzato correttamente il valore del "contesto".Questo è l'errore che stai ottenendo.Restituire anche la vista. Il codice qui sotto ti aiuterà.È possibile utilizzare anche il modello del versamento che migliorerebbe l'efficienza del codice.

Public Class MyBaseAdapter estende Baseadapter {

ArrayList<ListData> myList = new ArrayList<ListData>();
LayoutInflater inflater;
Context context;


public MyBaseAdapter(Context context, ArrayList<ListData> myList) {
    this.myList = myList;
    this.context = context;
    inflater = LayoutInflater.from(this.context);
}

@Override
public int getCount() {
    return myList.size();
}

@Override
public ListData getItem(int position) {
    return myList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

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

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.layout_list_item, parent, false);
        mViewHolder = new MyViewHolder(convertView);
        convertView.setTag(mViewHolder);
    } else {
        mViewHolder = (MyViewHolder) convertView.getTag();
    }

    ListData currentListData = getItem(position);

    mViewHolder.tvTitle.setText(currentListData.getTitle());
    mViewHolder.tvDesc.setText(currentListData.getDescription());
    mViewHolder.ivIcon.setImageResource(currentListData.getImgResId());

    return convertView;
}

private class MyViewHolder {
    TextView tvTitle, tvDesc;
    ImageView ivIcon;

    public MyViewHolder(View item) {
        tvTitle = (TextView) item.findViewById(R.id.tvTitle);
        tvDesc = (TextView) item.findViewById(R.id.tvDesc);
        ivIcon = (ImageView) item.findViewById(R.id.ivIcon);
    }
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top