java - listView setAdapter空指针异常?

标签 java android android-listview android-adapter baseadapter

我读了很多关于这种情况的帖子,但我找不到我错在哪里,我需要你的帮助和建议:)

我尝试制作 popoverView 显示搜索结果。用户发布搜索 key 。我必须解析从 Web 服务返回的 json 对象,并在 popoverView 中显示结果。我不认为问题出在我的 parseJson 类中,因为当我只尝试 parseJson 类时,它工作得很好,所以我不考虑这里。

ParseJsonSearchItem 是解析类,SearchAdapter 是成本适配器类。

我花了2天的时间,但我没有任何解决方案,请帮助我?

注意:抱歉我的英语。

这是 setAdapter 的主要 Activity 。

package com.ip_dergi;

import org.brickred.socialauth.android.DialogListener;
import org.brickred.socialauth.android.SocialAuthAdapter;
import org.brickred.socialauth.android.SocialAuthAdapter.Provider;
import org.brickred.socialauth.android.SocialAuthError;
import org.brickred.socialauth.android.SocialAuthListener;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Point;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;

import com.daniel.lupianez.casares.PopoverView;
import com.daniel.lupianez.casares.PopoverView.PopoverViewDelegate;
import com.ip_dergi.loader.ImageLoader;
import com.ip_dergi.utils.ParseJsonSearchItem;
import com.ip_dergi.utils.SearchAdapter;
import com.ip_dergi.utils.Singleton;
import com.ip_dergi.utils.Singleton1;
import com.ip_dergi.utils.Typefaces;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;

//içerik göstermek için içinde textVİew image view falan olacak

public class ItemContent extends Activity implements View.OnClickListener,
        PopoverViewDelegate, OnItemClickListener, OnEditorActionListener {

    TextView contentTxt, contentHeader;
    ImageView contentİmage;
    Intent intent;

    private Typefaces typeFaceTwitter;

    Typeface KlavikaMedium, KlavikaRegular;
    View menuButton;
    Button shareButton;
    View videoButton, backButton;
    TextView contentCategoryName;

    EditText searchEditText;
    ImageButton searcButton;
    SlidingMenu smenu;
    ListView lvSliding, lvSearch;

    PopoverView popoverView;
    boolean sendEmail = false, twittera = false, searchEditTextVisible = false;
    int screenWidth, screenHeight;
    ParseJsonSearchItem parseJsonSearchItem;
    SearchAdapter searchAdapter;

    private SocialAuthAdapter adapter;

    private StringBuilder message;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
        setContentView(R.layout.activity_item_content);
        getScreenDimensions();

        // ------------------------------------- slidingMenu
        smenu = new SlidingMenu(this);
        smenu.setMode(SlidingMenu.LEFT);
        smenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        smenu.setShadowWidth(25);
        smenu.setFadeDegree(0.0f);
        smenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
        smenu.setBehindWidth(250);
        smenu.setMenu(R.layout.sliding_menu1);

        lvSliding = (ListView) findViewById(R.id.listView_sliding_menu);
        lvSliding.setOnItemClickListener(this);

        Singleton b = Singleton.getInstance();
        ListAdapter adapter1 = new SimpleAdapter(ItemContent.this,
                b.getContentCategoryName(), R.layout.list_item, new String[] {
                        "catName", "id" }, new int[] { R.id.categoryName,
                        R.id.categoryID });
        lvSliding.setAdapter(adapter1);
        //--------------------------------------

        // ----------------------------------------------- social login
        adapter = new SocialAuthAdapter(new ResponseListener());
        adapter.addProvider(SocialAuthAdapter.Provider.FACEBOOK,
                R.drawable.white_color);
        message = new StringBuilder();
        //-------------------------------------------------

        lvSearch = (ListView) findViewById(R.id.search_item_listview);
        searchAdapter = new SearchAdapter(this, getApplication());
        lvSearch.setAdapter(searchAdapter);  // ***SETADAPTER HERE***

        searchEditText = (EditText) findViewById(R.id.searchEditText);
        searchEditText.setOnEditorActionListener(this);
        menuButton = (View) findViewById(R.id.menuButton);
        menuButton.setOnClickListener(this);
        shareButton = (Button) findViewById(R.id.share_button_view);
        shareButton.setOnClickListener(this);
        videoButton = (View) findViewById(R.id.video_button_view);
        videoButton.setOnClickListener(this);
        backButton = (View) findViewById(R.id.back_button_view);
        backButton.setOnClickListener(this);
        searcButton = (ImageButton) findViewById(R.id.searchButton);
        searcButton.setOnClickListener(this);

        KlavikaMedium = Typeface.createFromAsset(getAssets(),
                "font/Klavika-Medium.otf");
        KlavikaRegular = Typeface.createFromAsset(getAssets(),
                "font/KlavikaRegular-Plain.otf");

        typeFaceTwitter = new Typefaces();

        contentTxt = (TextView) findViewById(R.id.item_content_txt);
        contentTxt.setTypeface(KlavikaRegular);
        contentHeader = (TextView) findViewById(R.id.item_content_header);
        contentHeader.setTypeface(KlavikaMedium);
        contentİmage = (ImageView) findViewById(R.id.item_content_image);
        contentCategoryName = (TextView) findViewById(R.id.contentCategoryName);

        intent = getIntent();
        contentHeader.setText(intent.getStringExtra("contentHeader"));
        contentTxt.setText(intent.getStringExtra("contentTxt"));
        contentCategoryName.setText(intent
                .getStringExtra("contentCategoryName"));

        ImageLoader imgLoader = new ImageLoader(ItemContent.this);
        imgLoader.DisplayImage(intent.getStringExtra("contentİmageUrl"),
                R.anim.progress_anim, contentİmage);

    }

    @Override
    public void onClick(View view) {
        // TODO Auto-generated method stub

        switch (view.getId()) {

        case R.id.searchButton:

            if (searchEditTextVisible == false) {
                searchEditText.setVisibility(View.VISIBLE);
                searchEditTextVisible = true;

            } else {
                searchEditText.setVisibility(View.GONE);
                searchEditText.setText("");
                searchEditTextVisible = false;
            }

            break;
        case R.id.menuButton:
            smenu.toggle();
            break;
        case R.id.back_button_view:
            finish();
            break;
        case R.id.video_button_view:

            break;
        case R.id.share_button_view:

            popoverViewShare(view);

            TextView faceText = (TextView) popoverView
                    .findViewById(R.id.facebookButton);
            faceText.setTypeface(KlavikaMedium);
            faceText.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    authorize(Provider.FACEBOOK);

                }
            });

            TextView twitText = (TextView) popoverView
                    .findViewById(R.id.twitterButton);
            twitText.setTypeface(typeFaceTwitter.get(getApplicationContext(),
                    "font/PICOBLA_.TTF"));
            twitText.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), "click twitter",
                            Toast.LENGTH_LONG).show();

                }
            });

            TextView emailText = (TextView) popoverView
                    .findViewById(R.id.emailButton);

            emailText.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    sendEmail();
                    if (sendEmail == false) {
                        Log.d("sendEmail", "faild");
                    } else {
                        Log.d("sendEmail", "succes");
                        sendEmail = false;
                    }

                }
            });

            Log.d("ıtemContent", "share button press");

            break;

        default:
            break;
        }

    }

    private void authorize(final Provider provider) {
        adapter.authorize(ItemContent.this, provider);
        Toast.makeText(getApplicationContext(), "connect facebook",
                Toast.LENGTH_SHORT).show();
    }

    private void sendEmail() {
        final Intent intentEmail = new Intent(Intent.ACTION_SEND);
        intentEmail.setType("text/plain");
        intentEmail.putExtra(Intent.EXTRA_SUBJECT,
                intent.getStringExtra("contentHeader"));
        intentEmail.putExtra(Intent.EXTRA_TEXT,
                intent.getStringExtra("contentTxt"));

        startActivity(Intent.createChooser(intentEmail, "Send Email"));
        sendEmail = true;

    }

    private final class ResponseListener implements DialogListener {
        @Override
        public void onCancel() {
        }

        @Override
        public void onBack() {
        }

        @Override
        public void onComplete(final Bundle values) {
            if (message.length() >= 0) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                        .permitAll().build();
                StrictMode.setThreadPolicy(policy);
                if (adapter.getCurrentProvider().getProviderId()
                        .equalsIgnoreCase("facebook")) {
                    adapter.updateStory("Ip Dergi tarafından gönderildi",
                            intent.getStringExtra("contentHeader"), "",
                            intent.getStringExtra("contentTxt"), "",
                            intent.getStringExtra("contentİmageUrl"),
                            new MessageListener());

                    Log.d("send", "facebook");
                } else
                    adapter.updateStatus(message.toString(),
                            new MessageListener(), false);

            }

        }

        @Override
        public void onError(SocialAuthError socialAuthError) {
        }

        private final class MessageListener implements
                SocialAuthListener<Integer> {
            @Override
            public void onExecute(String provider, Integer status) {
                if (status == 200 || status == 201 || status == 204)
                    Toast.makeText(ItemContent.this,
                            "gönderildi : " + provider, Toast.LENGTH_LONG)
                            .show();
                else
                    Toast.makeText(ItemContent.this,
                            "Gönderilemedi" + provider, Toast.LENGTH_LONG)
                            .show();
            }

            @Override
            public void onError(SocialAuthError e) {
            }
        }
    }

    @Override
    public void popoverViewWillShow(PopoverView view) {
        // TODO Auto-generated method stub

    }

    @Override
    public void popoverViewDidShow(PopoverView view) {
        // TODO Auto-generated method stub

    }

    @Override
    public void popoverViewWillDismiss(PopoverView view) {
        // TODO Auto-generated method stub

    }

    @Override
    public void popoverViewDidDismiss(PopoverView view) {
        // TODO Auto-generated method stub

    }

    public void getScreenDimensions() {

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        screenWidth = size.x;
        screenHeight = size.y;

        Toast.makeText(
                getApplicationContext(),
                "width" + Integer.toString(screenWidth) + "heigt"
                        + Integer.toString(screenHeight), Toast.LENGTH_LONG)
                .show();

    }

    public void popoverViewShare(View view) {

        RelativeLayout rootPopoView = (RelativeLayout) findViewById(R.id.content_item_layout);
        popoverView = new PopoverView(this, R.layout.share_item);
        popoverView.setContentSizeForViewInPopover(new Point(250, 250));
        popoverView.setDelegate(this);
        popoverView.showPopoverFromRectInViewGroup(rootPopoView,
                popoverView.getFrameForView(view),
                popoverView.PopoverArrowDirectionDown, true);

    }

    public void popoverViewSearch(View view) {

        RelativeLayout rootPopoView = (RelativeLayout) findViewById(R.id.content_item_layout);
        popoverView = new PopoverView(this, R.layout.search_result_listview);

        if (screenHeight > screenWidth) {
            popoverView.setContentSizeForViewInPopover(new Point(
                    screenWidth - 100, screenHeight / 2));

        } else {
            popoverView.setContentSizeForViewInPopover(new Point(
                    screenWidth / 2, screenHeight));
        }

        popoverView.showPopoverFromRectInViewGroup(rootPopoView,
                popoverView.getFrameForView(view),
                popoverView.PopoverArrowDirectionUp, true);

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long İd) {
        // TODO Auto-generated method stub

        switch (parent.getId()) {
        case R.id.listView_sliding_menu:

            Singleton1 x = Singleton1.getInstance();
            x.setContentItemSelection(((TextView) view
                    .findViewById(R.id.categoryID)).getText().toString());
            Log.d("ıtemContent",
                    ((TextView) view.findViewById(R.id.categoryID)).getText()
                            .toString());

            finish();

            break;

        default:
            break;
        }

    }

    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        View searchView = findViewById(R.id.searchButton);
        // TODO Auto-generated method stub
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            Toast.makeText(getApplicationContext(), searchEditText.getText(),
                    Toast.LENGTH_LONG).show();

            if (searchEditText != null) {

                String searchKey = searchEditText.getText().toString();
                popoverViewSearch(searchView);
                parseJsonSearchItem = new ParseJsonSearchItem(ItemContent.this,
                        this.getApplication(),searchAdapter);

                parseJsonSearchItem.execute(searchKey);
            }

            return true;
        }
        return false;
    }

}

适配器类扩展了baseAdapter

package com.ip_dergi.utils;

import java.util.ArrayList;

import android.app.Application;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.ip_dergi.R;
import com.ip_dergi.loader.ImageLoader;

public class SearchAdapter extends BaseAdapter {

    private Context mContext;
    private Application mApplication;
    private ArrayList<Utils> mUtilsArraylist = new ArrayList<Utils>();

    public SearchAdapter(Context con, Application app) {
        this.mContext = con;
        this.mApplication = app;
    }

    public void GetMoreItem(ArrayList<Utils> arrayList) {
        mUtilsArraylist = arrayList;
        notifyDataSetChanged();

    }

    @Override
    public int getCount() {
        return mUtilsArraylist == null ? 0 : mUtilsArraylist.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;

        final Utils utils=mUtilsArraylist.get(position);

        String searchImageUrl=utils.searchImageUrl;

        if (convertView == null) {
            SearchHolder holder = new SearchHolder();
            view = View.inflate(mContext, R.layout.search_row_item, null);

            holder.searchImageArea = (ImageView) view
                    .findViewById(R.id.searchImage);
            holder.searchTextArea = (TextView) view
                    .findViewById(R.id.searchDesc);
            holder.searchDateArea = (TextView) view
                    .findViewById(R.id.searchDate);
            holder.searchCategoryArea = (TextView) view
                    .findViewById(R.id.searchCategory);

            view.setTag(holder);

        } else {
            return convertView;
        }

        final SearchHolder searchHolder= (SearchHolder) view.getTag();

        searchHolder.searchCategoryArea.setText(utils.searchContentCategory);
        searchHolder.searchDateArea.setText(utils.searchContentDate);
        searchHolder.searchTextArea.setText(utils.searchTextDesc);


        ImageLoader searchImageLoader= new ImageLoader(mApplication);
        searchImageLoader.DisplayImage(searchImageUrl, searchHolder.searchImageArea);

        return view;
    }

    public class SearchHolder {

        ImageView searchImageArea;
        TextView searchTextArea;
        TextView searchDateArea;
        TextView searchCategoryArea;

    }

}

现在布局

search_result_listview.xml

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

        <ListView
            android:id="@+id/search_item_listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" >
        </ListView>

    </RelativeLayout>

search_row_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:layout_marginTop="15dp"
        android:background="@color/white"
        android:minHeight="70dp" 
        android:id="@+id/search_listview_row">

        <ImageView
            android:id="@+id/searchImage"
            android:layout_width="150dp"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:background="@color/gray"
            android:scaleType="fitXY" />

        <TextView
            android:id="@+id/searchDesc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="17dp"
            android:layout_marginTop="10dp"
            android:layout_toRightOf="@+id/searchImage"
            android:text="Some text"
            android:textColor="@color/black"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/searchCategory"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/searchDesc"
            android:layout_centerVertical="true"
            android:layout_marginLeft="17dp"
            android:layout_marginTop="10dp"
            android:layout_toRightOf="@+id/searchImage"
            android:text="Some text"
            android:textColor="@color/black"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/searchDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/searchCategory"
            android:layout_marginLeft="17dp"
            android:layout_toRightOf="@+id/searchImage"
            android:text="Some text"
            android:textColor="@color/black"
            android:textSize="16sp" />

    </RelativeLayout>

最后是错误消息

10-03 04:44:26.201: E/ViewRootImpl(20281): sendUserActionEvent() mView == null
10-03 04:44:29.431: E/AndroidRuntime(20281): FATAL EXCEPTION: main
10-03 04:44:29.431: E/AndroidRuntime(20281): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ip_dergi/com.ip_dergi.ItemContent}: java.lang.NullPointerException
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.app.ActivityThread.access$700(ActivityThread.java:150)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.os.Looper.loop(Looper.java:137)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.app.ActivityThread.main(ActivityThread.java:5279)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at java.lang.reflect.Method.invokeNative(Native Method)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at java.lang.reflect.Method.invoke(Method.java:511)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at dalvik.system.NativeStart.main(Native Method)
10-03 04:44:29.431: E/AndroidRuntime(20281): Caused by: java.lang.NullPointerException
10-03 04:44:29.431: E/AndroidRuntime(20281):    at com.ip_dergi.ItemContent.onCreate(ItemContent.java:115)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.app.Activity.performCreate(Activity.java:5267)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
10-03 04:44:29.431: E/AndroidRuntime(20281):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
10-03 04:44:29.431: E/AndroidRuntime(20281):    ... 11 more

最佳答案

我来猜猜(你确实需要回答前面的问题:第 115 行在哪里)。

在getView中,当convertView为null时,你可以正确地膨胀一个新 View :

   if (convertView == null) {
        SearchHolder holder = new SearchHolder();
        view = View.inflate(mContext, R.layout.search_row_item, null);
        ...
    } else {
        return convertView;
    }

然后进行更多初始化。我怀疑非空情况也需要进行初始化。例如,当convertView为空时,您从数组中获取“utils”并将其用于某些初始化。但是当您重用convertView时,您似乎保留了旧值,这些值属于旧“位置”,而不是当前位置。

关于java - listView setAdapter空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19149653/

相关文章:

android - 如何检测用户何时滚动到 ListView 顶部并通过 ListView 传递触摸(如果是)?

java - ListView 适配器行为异常。在我单击同一个 ListView 中的按钮后,ListView 中不相关的按钮被单击

java - 多个数据库的 Dao 接口(interface)?

java - 创建一个我可以将二进制文件发送到的 RESTful 服务是否有意义?

java - 使用java小程序写入文件

java - 为什么Android中volley找不到ImageLoader

java - 如何将 HTML 表单提交重定向到 iframe?

android - 适用于 Android 的纯 C++ 应用程序及其性能

java - Facebook Graph API 请求返回 IOException "Hostname <fbcdn-profile-a.akamaihd.net> was not verified"

android - 通过拖动重新排序 ListView 的元素