0

I have trouble loading data from remote server to my list view. It is showing the above mentioned error, and the app crashes as soon as I open the list. I have highlighted the functions where the error occurs in log cat. I also mentioned where is the fuction in my classes.

public class Library extends Fragment {
private MaterialSearchView searchView;
Librarycontact currentItem;
private SimpleAdapterLibrary adpt;
List<Librarycontact> result;
ListView lView ;
 ;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.lib, container, false);

    setHasOptionsMenu(true);

    searchView = (MaterialSearchView)v.findViewById(R.id.search_view);
    searchView.setVoiceSearch(true); //or false
  //  searchView.setSuggestions(getResources().getStringArray(R.array.query_suggestions));
 //   searchView.setCursorDrawable(R.drawable.custom_cursor);

    adpt  = new SimpleAdapterLibrary(new ArrayList<Librarycontact>(), getActivity());
    lView = (ListView) v.findViewById(R.id.list);
    searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {


        @Override
        public boolean onQueryTextSubmit(String query) {


            for (int i = 0; i < lView.getAdapter().getCount(); i++) {
                currentItem = result.get(i);

                if (query.contentEquals(currentItem.getitmCode())) {

                    Intent l = new Intent(getActivity(), SingleBook.class);

                    l.putExtra("id", currentItem.getid());
                    l.putExtra("itemname", currentItem.getitemname());
                    l.putExtra("itmCode", currentItem.getitmCode());

                    l.putExtra("itmRate", currentItem.getitmRate());

                    startActivity(l);
                    break;

                } else

                {

                    Toast.makeText(getActivity(), "No Match Found", Toast.LENGTH_SHORT).show();
                }
            }

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            return false;
        }
    });

    searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
        @Override
        public void onSearchViewShown() {

        }

        @Override
        public void onSearchViewClosed() {

        }
    });
    lView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            currentItem = result.get(position);
            Intent i = new Intent(getActivity() ,SingleBook.class);

            i.putExtra("id", currentItem.getid());
            i.putExtra("itemname", currentItem.getitemname());
            i.putExtra("itmCode", currentItem.getitmCode());

            i.putExtra("itmRate", currentItem.getitmRate());

            startActivity(i);

        }
    });

    searchView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            currentItem = result.get(position);
            Intent i = new Intent(getActivity(), SingleBook.class);

            i.putExtra("id", currentItem.getid());
            i.putExtra("itemname", currentItem.getitemname());
            i.putExtra("itmCode", currentItem.getitmCode());

            i.putExtra("itmRate", currentItem.getitmRate());

            startActivity(i);

        }

    });

    if (isAvailable()){   lView.setAdapter(adpt);
        // Exec async load task
        (new AsyncListViewLoader()).execute("http://minor.esy.es/libraryavailabilityofbooks.php");
    }
    else{
        showAlertDialog(getActivity(), "No Internet Connection",
                "Please Check Your Internet Connection And Try Again", false);
    }
    return v;}
public Boolean isAvailable() {
    try {
        Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1    www.google.com");
        int returnVal = p1.waitFor();
        boolean reachable = (returnVal==0);
        if(reachable){
            System.out.println("Internet access");
            return reachable;
        }
        else{
            System.out.println("No Internet access");
        }

    } catch (Exception e) {

        e.printStackTrace();
    }
    return false;
}
public void showAlertDialog(Context context, String title, String message, Boolean status) {
    AlertDialog alertDialog = new AlertDialog.Builder(context).create();
    alertDialog.setCancelable(false);
    // Setting Dialog Title
    alertDialog.setTitle(title);

    // Setting Dialog Message
    alertDialog.setMessage(message);

    // Setting alert dialog icon

    // Setting OK Button
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        }
    });

    // Showing Alert Message
    alertDialog.show();

}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_main, menu);

    MenuItem item = menu.findItem(R.id.action_search);

    searchView.setMenuItem(item);

}

HERE **private class AsyncListViewLoader extends AsyncTask<String, Void, List<Librarycontact>> {**
    private final ProgressDialog dialog = new ProgressDialog(getActivity());

    @Override
    protected void onPostExecute(List<Librarycontact> result) {

        super.onPostExecute(result);
        dialog.dismiss();
        adpt.getItemList();
        **adpt.setItemList(result);** HERE
        adpt.notifyDataSetChanged();
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog.setMessage("Loading information...");
        dialog.show();
    }

    @Override
    protected List<Librarycontact> doInBackground(String... params) {
        result = new ArrayList<>();

        try {
            URL u = new URL(params[0]);

            HttpURLConnection conn = (HttpURLConnection) u.openConnection();
            conn.setRequestMethod("GET");

            conn.connect();
            InputStream is = conn.getInputStream();

            // Read the stream
            byte[] b = new byte[1024];
            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            while ( is.read(b) != -1)
                baos.write(b);

            String JSONResp = new String(baos.toByteArray());

            JSONArray arr = new JSONArray(JSONResp);
            for (int i=0; i < arr.length(); i++) {
                result.add(convertContact(arr.getJSONObject(i)));
            }

            return result;
        }
        catch(Throwable t) {
            t.printStackTrace();
        }
        return null;
    }

    private Librarycontact convertContact(JSONObject obj) throws JSONException {
        String itemname = obj.getString("availability");
        String itmCode = obj.getString("title");
        String id = obj.getString("id");
        String itmRate = obj.getString("authorname");

        return new Librarycontact(itemname, itmCode, id,itmRate);
    }


}




@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == MaterialSearchView.REQUEST_VOICE && resultCode == getActivity().RESULT_OK) {
        ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        if (matches != null && matches.size() > 0) {
            String searchWrd = matches.get(0);
            if (!TextUtils.isEmpty(searchWrd)) {
                searchView.setQuery(searchWrd, false);
            }
        }

        return;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

my data model

public class Librarycontact implements Serializable {



private String itemname;

private String id;

private String itmCode;
private String itmRate;

public Librarycontact(String name, String itmCode, String id,String itmRate) {
    super();
    this.itemname = name;
    this.itmCode = itmCode;
    this.id = id;
    this.itmRate = itmRate;
}

public String getitemname() {
    return itemname;
}

public void setName(String itemname) {
    this.itemname = itemname;
}

public String getitmCode() {
    return itmCode;
}

public void setitmCode(String itmCode) {
    this.itmCode = itmCode;
}

public String getid() {
    return id;
}

public void setid(String id) {
    this.id = id;
}

public String getitmRate() {
    return itmRate;
}

public void setitmRate(String itmRate) {
    this.itmRate = itmRate;
}
}

and my adapter

public class SimpleAdapterLibrary extends ArrayAdapter<Librarycontact> {

private List<Librarycontact> itemList;
private Context context;
private ArrayList<Librarycontact> contactListOrigin = new ArrayList<Librarycontact>();


   public SimpleAdapterLibrary(List<Librarycontact> itemListt, Context ctx) {
    super(ctx, android.R.layout.simple_list_item_1, itemListt);
    this.itemList = itemListt;
    this.context = ctx;

    this.contactListOrigin.addAll(itemListt);

}


public int getCount() {
    if (itemList != null)
        return itemList.size();
    return 0;
}
public Librarycontact getItem(int position) {
    if (itemList != null)
        return itemList.get(position);

    return null;
}

public long getItemId(int position) {
    if (itemList != null)
        return itemList.get(position).hashCode();
    return 0;
}

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

    View v = convertView;
    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.liblistitem, null);
    }

    Librarycontact c = itemList.get(position);
    //TextView text = (TextView) v.findViewById(R.id.name);
    //text.setText(c.getitemname());

    TextView text1 = (TextView) v.findViewById(R.id.name);
    text1.setText(c.getitmCode());
    String g= c.getitmCode();
    Character o =  g.charAt(0);

    String k = o.toString();
    TextDrawable drawable = TextDrawable.builder()
            .beginConfig()
            .textColor(Color.BLACK)
            .useFont(Typeface.DEFAULT)
            .fontSize(30)
            .bold()
            .toUpperCase()
            .endConfig()
            .buildRoundRect(k, Color.RED, 10); // radius in px


    ImageView img = (ImageView) v.findViewById(R.id.imageView2);
    img.setImageDrawable(drawable);

    /*       TextView text2 = (TextView) v.findViewById(R.id.email);
    text2.setText(c.getid());

    TextView text3 = (TextView) v.findViewById(R.id.phone);
    text3.setText(c.getitmRate());
    */
    return v;

}

public List<Librarycontact> getItemList() {

    if (itemList == null)
        return Collections.emptyList();
    else


    return itemList;
}

public void setItemList(List<Librarycontact> itemListt) {
    this.itemList = itemListt;
    **contactListOrigin.addAll(itemListt);** HERE 
}}

my logcat

11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime: FATAL EXCEPTION: main
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime: Process: essentials.gtbit.com.gtbitessentials, PID: 4998
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at java.util.ArrayList.addAll(ArrayList.java:188)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at essentials.gtbit.com.gtbitessentials.SimpleAdapterLibrary.setItemList(SimpleAdapterLibrary.java:110)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at essentials.gtbit.com.gtbitessentials.Library$AsyncListViewLoader.onPostExecute(Library.java:215)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at essentials.gtbit.com.gtbitessentials.Library$AsyncListViewLoader.onPostExecute(Library.java:206)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at android.os.AsyncTask.finish(AsyncTask.java:632)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at android.os.AsyncTask.access$600(AsyncTask.java:177)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:111)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:194)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5576)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
11-09 02:01:25.892 4998-4998/essentials.gtbit.com.gtbitessentials E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)
1

1 Answer 1

1

You have to do this in class SimpleAdapterLibrary:

 public void setItemList(List<Librarycontact> itemListt) {
        if(itemListt==null) {
                return;
        }
        this.itemList = itemListt;
        contactListOrigin.addAll(itemListt);
    }

or in class AsyncListViewLoader:

 @Override
    protected void onPostExecute(List<Librarycontact> result) {
        super.onPostExecute(result);
        dialog.dismiss();
        if(result!=null){
                adpt.setItemList(result);
                adpt.notifyDataSetChanged();
        }        
    }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.