laden, um genauer zu sein Ich habe eine Aktivität, die eine tablayout enthält jede Registerkarte sollte im Grunde laden ein eigenständiges Fragment mit einem Recycler anzeigen und ich will dieAnwendung abgestürzt beim Versuch, Json mit Retrofit zu einem RecyclerView in einem Fragment in einem tablayout
public class RestaurantLogoView extends AppCompatActivity implements LiteFragment.OnFragmentInteractionListener, RegularFragment.OnFragmentInteractionListener, View.OnClickListener {
private static final String TAG = "RestaurantLogoView";
public static ProgressDialog progressDialog;
//TODO
public static View.OnClickListener myOnClickListener;
private String chosenArea;
TextView locationTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ViewPager mViewPager = (ViewPager) findViewById(R.id.container);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
SectionsPagerAdapter pagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(),getApplicationContext());
//remove this if you still didnt get data in the fragment
mViewPager.setAdapter(pagerAdapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(view -> Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show());
locationTv = (TextView) findViewById(R.id.location_tv);
chosenArea = (String) getIntent().getSerializableExtra("Object");
locationTv.setText(chosenArea);
locationTv.setOnClickListener(this);
}
@Override
public void onFragmentInteraction(Uri uri) {
//TODO i added this lately not sure what its supposed to do but consider removing it
}
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
//
//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.menu_restaurant_main_view, menu);
// return true;
// }
@Override
public void onClick(View v) {
if (v == locationTv) {
Intent o = new Intent(getApplicationContext(), AreaList.class);
startActivity(o);
finish();
} else {
Toast.makeText(getApplicationContext(), "What do you want to eat today?", Toast.LENGTH_LONG).show();
}
}
private class SectionsPagerAdapter extends FragmentStatePagerAdapter {
String tabTitles[] = {getString(R.string.regular), getString(R.string.lite)};
Context context;
SectionsPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
new RegularFragment();
return RegularFragment.newInstance(TAG, position);
case 1:
new LiteFragment();
return LiteFragment.newInstance(TAG, position);
default:
return null;
}
}
@Override
public int getCount() {
return tabTitles.length;
}
@Override
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
}
}
`
Dies ist das erste Fragment, das in meinen ersten Registern angezeigt werden soll
public class RegularFragment extends Fragment {
OnFragmentInteractionListener mListener;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
public static final String REGULAR_PARAM1 = "lite";
View RootView;
List<RestaurantModel> regularRestaurants;
private RecyclerView recyclerView;
RecyclerViewAdapter adapter;
private Call<RestaurantElKbeer> callbackCall;
private String TAG = "RegularFragment";
//new
public static final String ARG_PAGE = "ARG_PAGE";
private int mPage;
public RegularFragment() {
}
// TODO: Rename and change types and number of parameters
public static Fragment newInstance(String param, int position) {
//TODO it might be important i didnt know why i created it
Fragment fragment = new RegularFragment();
Bundle args = new Bundle();
args.putInt(param, position);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
regularRestaurants = requestRegularList();
mPage = getArguments().getInt(ARG_PAGE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//new
RootView = inflater.inflate(R.layout.fragment_regular, container, false);
recyclerView = (RecyclerView) RootView.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
initializeAdapter();
LinearLayoutManager llm = new LinearLayoutManager(this.getContext());
recyclerView.setLayoutManager(llm);
return RootView;
}
private void initializeAdapter() {
adapter = new RecyclerViewAdapter(getActivity(), regularRestaurants);
recyclerView.setAdapter(adapter);
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
private List<RestaurantModel> requestRegularList() {
List<RestaurantModel> myRestaurantsList = new ArrayList<>();
RestAdapter restAdapter = new RestAdapter();
API api = restAdapter.getApi();
// URL: https://betaweb.jeebley.com/services_new/services.php?action=search&langId=1&countryId=21&cuisineType=1&cuisineId=all&areaId=1&delvType=1
Call<RestaurantElKbeer> call = api.getRestaurants("search", "1", "21", "all", "1", "1");
call.enqueue(new Callback<RestaurantElKbeer>() {
@Override
public void onResponse(@NonNull Call<RestaurantElKbeer> call, @NonNull Response<RestaurantElKbeer> response) {
if (response.isSuccessful()) {
ArrayList<String> names = new ArrayList<String>();
RestaurantElKbeer restaurantResponse = response.body();
List<RestaurantModel> list = restaurantResponse.getRestaurantModel();
if(list != null && !list.isEmpty()){
for (int i = 0; i < list.size(); i++) {
String name;
name = list.get(i).getRName();
names.add(name);
Log.i(TAG, "onResponse: " + names.get(i));
}
}
else
{
Log.i(TAG, "onResponse(regular): RestaurantModelList is null");
}
RecyclerViewAdapter adapter = new RecyclerViewAdapter(getContext(), list);
recyclerView.setAdapter(adapter);
recyclerView.setOnClickListener(v -> {
Intent i = new Intent(getContext(), ChooseYourLanguage.class);
i.putExtra("Object", getId());
startActivityForResult(i, 0);
});
}
}
@Override
public void onFailure(@NonNull Call<RestaurantElKbeer> call, Throwable t) {
Log.i(TAG, "onFailure: failed RegularFragmentCall");
}
});
return myRestaurantsList;
}
interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
/**
* Initialize the contents of the Fragment host's standard options menu. You
* should place your menu items in to <var>menu</var>. For this method
* to be called, you must have first called {@link #setHasOptionsMenu}. See
* {@link RestaurantLogoView#onCreateOptionsMenu(Menu) Activity.onCreateOptionsMenu}
* for more information.
*
* @param menu The options menu in which you place your items.
* @param inflater
* @see #setHasOptionsMenu
* @see #onPrepareOptionsMenu
* @see #onOptionsItemSelected
*/
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void setHasOptionsMenu(boolean hasMenu) {
super.setHasOptionsMenu(hasMenu);
}
}
: Daten aus dem API Retrofit abzurufenden
so ist dies die Aktivität in den recyclerView Basen auf Benutzeraktion geladen werden
Und das ist mein RecyclerViewAdapter
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private List<RestaurantModel> items;
private Context ctx;
public RecyclerViewAdapter(Context context, List<RestaurantModel> items) {
this.ctx = context;
this.items=items;
}
private OnItemClickListener mOnItemClickListener;
private SharedPref sharedPref;
public interface OnItemClickListener {
void onItemClick(View view, RestaurantModel obj, int position);
}
public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
this.mOnItemClickListener = mItemClickListener;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
CardView cv;
TextView title;
TextView description;
ImageView imageView;
ViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.restaurant_card_view);
title = (TextView) itemView.findViewById(R.id.restaurantName_section_label);
description = (TextView) itemView.findViewById(R.id.section_label2);
imageView = (ImageView) itemView.findViewById(R.id.restaurantImageView);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.restaurant_card_layout, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position, List<Object> payloads) {
super.onBindViewHolder(holder, position, payloads);
RestaurantModel p = (RestaurantModel) payloads.get(position);
holder.title.setText(p.getRName());
if (!p.getDelvType().equals("1")) {
holder.description.setText(p.getJDeliveryTime() + " " + p.getRMinOrderAmt() + " " + p.getJDeliveryCharge());
} else {
holder.description.setText(p.getRDeliveryTime() + " " + p.getRMinOrderAmt() + " " + p.getRDeliveryCharge());
holder.imageView.setImageResource(R.mipmap.ic_launcher);
}
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("RecyclerViewAdapter", "onClick: replace with intent to send Restaurant data");
}
});
}
@Override
public void onBindViewHolder(ViewHolder holder,int position) {
final RestaurantModel p = items.get(position);
holder.title.setText(p.getRName());
if (!p.getDelvType().equals("1")) {
holder.description.setText(p.getJDeliveryTime() + " " + p.getRMinOrderAmt() + " " + p.getJDeliveryCharge());
} else {
holder.description.setText(p.getRDeliveryTime() + " " + p.getRMinOrderAmt() + " " + p.getRDeliveryCharge());
}
holder.cv.setOnClickListener(view -> {
mOnItemClickListener.onItemClick(view, p, position);
});
}
@Override
public int getItemCount() {
return items.size();
}
public interface OnLoadMoreListener {
void onLoadMore(int current_page);
}
}
Diese Ausnahme ist, ich bin
**
06-06 00 bekommen: 11: 05.215 10.571 bis 10.571/com.jeebley. jeebley E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: com.jeebley.jeebley, PID: 10571 java.lang.NullPointerException: Versuch, Schnittstelle Methode 'int java.util.List.size()' auf eine Null-Objekt-Referenz aufzurufen bei com.jeebley.jeebley.adapters.RecyclerViewAdapter.getItemCount (RecyclerViewAdapter.java:109) bei android.support.v7.widget.RecyclerView.dispatchLayoutStep1 (RecyclerView.java:3493) bei android.support.v7.widget.RecyclerView .dispatchLayout (RecyclerView.java:3310) bei android.support.v7.widget.RecyclerView.onLayout (RecyclerView.java:3844) bei android.view.View.layout (View.java:17687) bei android.view .ViewGroup.layout (ViewGroup.java:5631) bei android.widget.RelativeLayout.onLayout (RelativeLayout.java:1079) bei android.view.View.layout (View.java:17687) bei android.view.ViewGroup .layout (Vi ewGroup.java:5631) bei android.support.v4.view.ViewPager.onLayout (ViewPager.java:1795) bei android.view.View.layout (View.java:17687) bei android.view.ViewGroup. Layout (ViewGroup.java:5631) bei android.support.design.widget.HeaderScrollingViewBehavior.layoutChild (HeaderScrollingViewBehavior.java:131) bei android.support.design.widget.ViewOffsetBehavior.onLayoutChild (ViewOffsetBehavior.java:42) bei android.support.design.widget.AppBarLayout $ ScrollingViewBehavior.onLayoutChild (AppBarLayout.java:1391) bei android.support.design.widget.CoordinatorLayout.onLayout (CoordinatorLayout.java:870) bei android.view. View.layout (View.java:17687) bei android.view.ViewGroup.layout (ViewGroup.java:5631) bei android.widget.FrameLayout.layoutChildren (FrameLayout.java:325) bei android.widget.FrameLayout. onLayout (FrameLayout.java:261) bei android.view.View.layout (View.java:17687) bei android.view.ViewGroup.layout (ViewGroup.java:5631) bei android.widget.LinearLayout.setChildFrame (LinearLayout.java:1762) bei android.widget.LinearLayout.layoutVertical (LinearLayout.java:1606) bei android.widget.LinearLayout.onLayout (LinearLayout.java:1515) bei android.view.View.layout (View.java: 17687) bei android.view.ViewGroup.layout (ViewGroup.java:5631) bei android.widget.FrameLayout.layoutChildren (FrameLayout.java:325) bei android.widget.FrameLayout.onLayout (FrameLayout.java: 261) bei android.view.View.layout (View.java:17687) bei android.view.ViewGroup.layout (ViewGroup.java:5631) bei android.widget.LinearLayout.setChildFrame (LinearLayout.java:1762) bei android.widget.LinearLayout.layoutVertical (LinearLayout.java:1606) bei android.widget.LinearLayout.onLayout (LinearLayout.java:1515) bei android.view.View.layout (View.java:17687) bei android.view.ViewGroup.layout (ViewGroup.java:5631) bei android.widget.FrameLayout.layoutChildren (FrameLayout.java:325) bei android.widget.FrameLayout.onLayout (FrameLayout.java:261) bei com.android.internal.policy.DecorView.onLayout (DecorView.java:774) bei android.view.View.layout (View.java:17687) bei android.view.ViewGroup.layout (ViewGroup.java:5631) bei android.view.ViewRootImpl.performLayout (ViewRootImpl.java:2511) bei android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2226) bei android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1364) bei android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:6763) bei android.view.Choreographer $ CallbackRecord.run (Choreographer.java:923) bei android.view.Choreographer.doCallbacks (Choreographer.java: 735) bei android.view.Choreographer.doFrame (Choreographer.java:667) bei android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:909) bei android.os.Handler.handleCallback (Handler.java: 761) bei android.os.Handler.dispatchMessage (Handler.java:98) bei android.os.Looper.loop (Looper.java:156) bei android.app.ActivityThread.main (Activit yThread.java:6524) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 941) bei com.android.internal .os.ZygoteInit.main (ZygoteInit.java:831) 06-06 00: 11: 05.238 10571-10571/com.jeebley.jeebley I/Prozess: Senden des Signals. PID: 10571 SIG: 9
**
im Grunde war ich nur hier testen, aber was ich wirklich tun möchte, ist das Restaurant Name, Beschreibung und Mindestbestellwert zu laden, die ich von der api erhalten wird, so dass in beiden Fällen die Daten nicht angezeigt wird, und Ich bin mir nicht sicher, warum oder in welchem Prozess der Absturz passiert und das Debuggen ist nur so irritierend ich weiß nicht die meisten Schritte –
Ich habe die If-Bedingung, um den Null-Zustand zu überprüfen, und ich aktualisierte die neue Ausnahme geworfen werden kann Bitte schauen Sie es sich an –