我读了很多关于这种情况的帖子,但我找不到我错的地方我需要你的帮助结束建议:)
我尝试制作显示搜索结果的 popoverView。用户发布 searchKey。我必须解析从 Web 服务返回的 json 对象,并在 popoverView 中显示结果。我不认为问题出在我的 parseJson 类中,因为当我只尝试 parseJson 类时它工作得很好,所以我不要在这里接受。
ParseJsonSearchItem 是解析类,SearchAdapter 是服装适配器类。
在这种情况下度过 2 天,但我没有任何解决方案,请帮帮我?
注意:对不起我的英语。
这就是 setAdapter 的主要活动。
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