-1

Applicationクラスで定義されたArrayListからListViewを表示しようとしています。ただし、Logcatで理由が指定されていない状態でスクロールすると、NullPointerExceptionが発生します。

LogCat出力:

05-17 11:05:35.365: W/System.err(2173): java.lang.NullPointerException
05-17 11:05:35.375: W/System.err(2173):     at in.net.maloo.HomeScreenListView$myAdapter.getView(HomeScreenListView.java:66)
05-17 11:05:35.385: W/System.err(2173):     at android.widget.AbsListView.obtainView(AbsListView.java:1294)
05-17 11:05:35.385: W/System.err(2173):     at android.widget.ListView.makeAndAddView(ListView.java:1727)
05-17 11:05:35.395: W/System.err(2173):     at android.widget.ListView.fillDown(ListView.java:652)
05-17 11:05:35.395: W/System.err(2173):     at android.widget.ListView.fillGap(ListView.java:623)
05-17 11:05:35.395: W/System.err(2173):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
05-17 11:05:35.405: W/System.err(2173):     at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2485)
05-17 11:05:35.405: W/System.err(2173):     at android.os.Handler.handleCallback(Handler.java:587)
05-17 11:05:35.405: W/System.err(2173):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-17 11:05:35.415: W/System.err(2173):     at android.os.Looper.loop(Looper.java:123)
05-17 11:05:35.415: W/System.err(2173):     at android.app.ActivityThread.main(ActivityThread.java:4627)
05-17 11:05:35.415: W/System.err(2173):     at java.lang.reflect.Method.invokeNative(Native Method)
05-17 11:05:35.425: W/System.err(2173):     at java.lang.reflect.Method.invoke(Method.java:521)
05-17 11:05:35.425: W/System.err(2173):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-17 11:05:35.425: W/System.err(2173):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-17 11:05:35.425: W/System.err(2173):     at dalvik.system.NativeStart.main(Native Method)

コード:

package in.net.maloo;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class HomeScreenListView extends ListActivity {

    private static class myAdapter extends BaseAdapter{
        private LayoutInflater mInflater;

        public myAdapter(Context context){
            mInflater = LayoutInflater.from(context);

        }

        public int getCount() {
            // TODO Auto-generated method stub
            return myApp.feedLength(0);
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View conertView, ViewGroup parent) {
            ViewHolder holder;

            if (conertView == null) {
                conertView = mInflater.inflate(R.layout.listview_homescreen, null);
                holder = new ViewHolder();

                holder.text1 = (TextView) conertView.findViewById(R.id.hs_listview_symbol);
                holder.text2 = (TextView) conertView.findViewById(R.id.hs_listview_price);
                holder.text3 = (TextView) conertView.findViewById(R.id.hs_listview_unit);
                holder.text4 = (TextView) conertView.findViewById(R.id.hs_listview_change);
                holder.text5 = (TextView) conertView.findViewById(R.id.hs_listview_pcp);
            } else {

                holder = (ViewHolder) conertView.getTag();
            }

            String com, ltp, volume, ltq, pcp;
            com = myApp.getFuturesData(position, "Commodity", 0) + " - " + myApp.getFuturesData(position, "Expiry", 0);
            ltp = myApp.getFuturesData(position, "LTP") + "";
            ltq = "LTQ: " + myApp.getFuturesData(position, "LTQ");
            volume = "Volume: " + myApp.getFuturesData(position, "Volume");
            pcp = "PCP: " + myApp.getFuturesData(position, "PCP");

            try {

            holder.text1.setText(com);
            Log.e("Position", com);
            holder.text2.setText(ltp);
            holder.text3.setText(volume);
            holder.text4.setText(ltq);
            holder.text5.setText(pcp);
            return conertView;
            }
            catch (NullPointerException e){
                e.printStackTrace();
            }
            finally {
                return conertView;
            }
        }

        static class ViewHolder {
            TextView text1;
            TextView text2;
            TextView text3;
            TextView text4;
            TextView text5;
        }
    }

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setListAdapter(new myAdapter(this));        

}
}

listview_homescreenレイアウト:

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="75dip" >

        <TextView
            android:id="@+id/hs_listview_symbol"
            android:layout_width="200dip"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_alignRight="@+id/hs_listview_change"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="@android:color/tertiary_text_light"
            android:textSize="17dip" />

        <TextView
            android:id="@+id/hs_listview_price"
            android:layout_width="75dip"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:text="28,788"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textSize="15dip" />

        <TextView
            android:id="@+id/hs_listview_unit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:text="Vol"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        <TextView
            android:id="@+id/hs_listview_pcp"
            android:layout_width="75dip"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:text="PCP"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        <TextView
            android:id="@+id/hs_listview_change"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="Small Text"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    </RelativeLayout>

</LinearLayout>

どうやら、convertView.getTag()メソッドが何らかの理由でnullを返しているため、すべての問題が発生しているようです。以前にmyAppで定義された配列への直接参照を使用していたときは同じコードが正常に機能していましたが、その後、異なるデータ型を保持するカスタムクラスのArrayListを使用するように切り替えました。

重要な場合、ListViewアクティビティは、3つのタブを含むTabhost内に含まれています。

これに関するどんな助けも大いに感謝されるでしょう。ありがとう!

4

2 に答える 2

2
if (conertView == null) {
   conertView = mInflater.inflate(R.layout.listview_homescreen, null);
   holder = new ViewHolder();

   holder.text1 = (TextView) conertView.findViewById(R.id.hs_listview_symbol);
   holder.text2 = (TextView) conertView.findViewById(R.id.hs_listview_price);
   holder.text3 = (TextView) conertView.findViewById(R.id.hs_listview_unit);
   holder.text4 = (TextView) conertView.findViewById(R.id.hs_listview_change);
   holder.text5 = (TextView) conertView.findViewById(R.id.hs_listview_pcp);
   **conertView.setTag(holder);**
} else {
  holder = (ViewHolder) conertView.getTag();
}

conertView.setTag(holder);がありませんでした。

于 2012-05-17T06:29:48.483 に答える
1

あなたは行方不明convertView.setTag(yourtag);になっているように見えるので、もちろんgetTag()nullを返しています。

if (conertView == null)の前の最後にを追加するだけelseです。

于 2012-05-17T06:24:38.300 に答える