0

I am trying to show custom suggestions with Array Adapter and data of suggestion is coming from database. I am getting data from database with onTextChange but Suggestions are not showing. Code with Neo4j database is ok and i am getting values from database.I am new to Android. Please can anyone tell me where is the problem? Here is my code. Thanks in Advance.

matri_suggestion xml

    <?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="horizontal" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/imageView_sugg"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/matri_sugg_name"
            android:layout_width="120dp"
            android:layout_height="wrap_content"            
            android:text="Name" />

        <TextView
            android:id="@+id/matri_sugg_proEdu"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:text="Profesn,Education" />

        <TextView
            android:id="@+id/matri_sugg_cityDist"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="CurrentCity,Dist" />
    </LinearLayout>

</LinearLayout>

MainActivity `

public class MainActivity extends Activity {
    AutoCompleteTextView search;
    String resultList;
    String matri_photo, matri_name, matri_prof_degree, matri_town_dist;
    List<AutoCompleteItems> clist = new ArrayList<AutoCompleteItems>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        search = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);

        search.addTextChangedListener(new TextWatcher() {

            public Context context;

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {

                String temp = arg0.toString();

                if (temp.length() > 0) {

                    try {

                        resultList = new Matri_Sugg(context).execute(temp)
                                .get();
                        setJSONdata(resultList);

                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (ExecutionException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }

            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub

            }
        });

        AutocompleteAdapter adapter = new AutocompleteAdapter(this,
                R.layout.matri_suggessions, clist);

        search.setAdapter(adapter);

    }



    void setJSONdata(String result) {
        try {

            JSONObject obj = new JSONObject(resultList);
            // Log.d("in setJSONdata", resultList);
            final JSONArray dataArray = obj.getJSONArray("data");
            Log.d("data Array", dataArray.length() + "");
            MainActivity ma=new MainActivity();

            try {

                for (int i = 0; i < dataArray.length(); i++) {

                    ma.matri_photo = dataArray.getJSONArray(i).getString(0);
                    ma.matri_name = dataArray.getJSONArray(i).getString(1) + " "
                            + dataArray.getJSONArray(i).getString(2);
                    ma.matri_prof_degree = dataArray.getJSONArray(i).getString(3)
                            + " " + dataArray.getJSONArray(i).getString(4);
                    ma.matri_town_dist = dataArray.getJSONArray(i).getString(5)
                            + " , " + dataArray.getJSONArray(i).getString(6);

                    AutoCompleteItems aci = new AutoCompleteItems(
                            R.drawable.npf, ma.matri_name, ma.matri_prof_degree,
                            ma.matri_town_dist);
                    ma.clist.add(aci);

                }



            } catch (JSONException e) {
                e.printStackTrace();
            } catch (BufferOverflowException e) {
                e.printStackTrace();
            }

        }

        catch (JSONException e) {

            e.printStackTrace();

        } catch (ArrayIndexOutOfBoundsException r) {

            r.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

` AsynchTask for getting values from database. Matri_Sugg

    public class Matri_Sugg extends AsyncTask<String, Void, String> {

    String result;
    List<String> resultarray;
    Array[][] res;
    URL url;
    String queryString, matri_photo, matri_name, matri_prof_degree, matri_town_dist ;
    Context context;

    public Matri_Sugg(Context context) {
        // TODO Auto-generated constructor stub
        this.context = context;

    }

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub\

        String query = params[0];

        try {

            DBConnect.connect();

            queryString = "{\"query\":\"match (n:Woftos_Profile),n-[r:Has_Matrimony]->m where m.Status='Active' and n.Gender<>'Male' and (n.First_Name =~ '(?i)"+query+".*' or n.Last_Name=~ '(?i)"+query+".*') return distinct m.Profile_Photo, n.First_Name,n.Last_Name,n.Profession,n.Degree,n.Town_C,n.District,id(m),id(n),n.Gender LIMIT 5\", \"params\":{}}";

            DBConnect.sendQuery(queryString);

            result = DBConnect.readInputStream();

            Log.d("server response", result);

        } catch (MalformedURLException e) {

            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (NullPointerException e) {
            // TODO: handle exception
            e.printStackTrace();
        }

        return result;
    }
}

AutoCompleteItems

    public class AutoCompleteItems {
    public int Matri_pic;
    public String Name=null;
    public String Prof_Edu=null;
    public String City_Dist=null;
    public AutoCompleteItems(int image, String name, String prof_edu, String city_dist){

        this.Matri_pic=image;
        this.Name=name;
        this.Prof_Edu=prof_edu;
        this.City_Dist=city_dist;

    }

}

AutoCompleteAdapter

public class AutocompleteAdapter extends ArrayAdapter<AutoCompleteItems>{

    public List<AutoCompleteItems> data;
    public Context context;
    public View row;
    public int resource = R.layout.matri_suggessions;

    public AutocompleteAdapter(Context context, int resource,
            List<AutoCompleteItems> objects) {
        super(context, resource, objects);

        this.data = new ArrayList<AutoCompleteItems>();
        this.context = context;
        this.data.addAll(objects);

    }

    static class DataHolder {
        ImageView iv;
        TextView txt_name, txt_prof_edu, txt_city_dist;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        row = convertView;
        DataHolder holder = new DataHolder();
        if (row == null) {

            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(resource, parent, false);

            holder.iv = (ImageView) row.findViewById(R.id.imageView_sugg);
            holder.txt_name = (TextView) row.findViewById(R.id.matri_sugg_name);
            holder.txt_prof_edu = (TextView) row.findViewById(R.id.matri_sugg_proEdu);
            holder.txt_city_dist = (TextView) row.findViewById(R.id.matri_sugg_cityDist);

            row.setTag(holder);

        } else {

            holder = (DataHolder) row.getTag();
            AutoCompleteItems info = data.get(position);

            holder.iv.setImageResource(info.Matri_pic);
            holder.txt_name.setText(info.Name);
            holder.txt_prof_edu.setText(info.Prof_Edu);
            holder.txt_city_dist.setText(info.City_Dist);

        }
        return row;
    }

}
Andi
  • 1
  • 1
  • zee my answer here http://stackoverflow.com/questions/19858843/how-to-dynamically-add-suggestions-to-autocompletetextview-with-preserving-chara – pskink Jun 30 '14 at 12:16
  • hi pskink, i tried that way before, i used simple adapter with data from hashmap, it was working also But the problem was it was showing null pointer exception when data array is null and was showing only one value in drop-down. I want at least 4 to 5 values in suggestions, so i moved towards array adapter. plz help if possible.. – Andi Jul 01 '14 at 04:41
  • so what problem did you have with FilterQueryProvider? – pskink Jul 01 '14 at 05:53
  • @pskink, I have not used filter in that code. Should i display that code here? – Andi Jul 02 '14 at 05:09
  • yes, try my approach – pskink Jul 02 '14 at 05:36

0 Answers0