Я пытаюсь реализовать функцию поиска в своем приложении для Android, я хочу взять то, что пользователь пишет в тексте редактирования поиска, из обнаружения активности и открыть новое действие, называемое поиском действий, в котором могут отображаться результаты, объект публикации является класс моей реализации, в котором я получаю данные из бэкэнда каждый раз, когда я пытаюсь это сделать, выдается исключение вот мой код для обнаружения активности для этой части `

search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            // setContentView(R.layout.search_grid);
            // gridView2 = (GridView) findViewById(R.id.search_grid);
            RequestParams rp = new RequestParams();
            final String url;
            if (people.isChecked()) {
                rp.add("user", search.getText().toString());
                rp.add("counter", "");
                url = "search_users";
            } else if (tags.isChecked()) {
                rp.add("tag", search.getText().toString());
                rp.add("counter", "");
                url = "search_exact_hashtag";
            } else {
                rp.add("location", search.getText().toString());
                rp.add("counter", "");
                url = "search_location";
            }
            final ArrayList<PostObject> addyExtras = new ArrayList<>();
            //Toast.makeText(getApplicationContext()," something " + , Toast.LENGTH_SHORT).show();
            PabloClient.post(url, rp, new JSONHandler(getApplicationContext(), new JSONHandler.OnFinishedListener() {
                @Override
                public void OnFinished(int statusCode, Header[] headers, JSONObject response, int result) {
                    try {
                        if (result == 1) {
                            // Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT).show();

                            JSONArray posts = response.getJSONArray("data");
                            setContentView(R.layout.search_grid);
                            //////////////////////////////////////////////


                            //////////////////////////////////////////////////////////////////
                            for (int i = 0; i < posts.length(); i++) {
                                searchPosts.add(new PostObject(posts.getJSONObject(i)));


                                addyExtras.add(searchPosts.get(i));

                            }




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

                    }
                    Intent intent = new Intent(ActivityDiscover.this, ActivitySearch.class);
                    intent.putParcelableArrayListExtra("mylist", addyExtras);
                    startActivity(intent);

                }
            }));
        }

    });

`

И вот как я понимаю намерение поисковой активности

searchPosts2 = getIntent().getParcelableArrayExtra("mylist");

1
Dina Magdy 4 Май 2016 в 12:41

2 ответа

Лучший ответ

Массив должен передаваться с помощью Пакет

Отправка массива

Сначала со стороны отправителя вам нужно добавить список массивов в пакет

Bundle data = new Bundle();
data.putParcelableArrayList("mylist", addyExtras);

Затем добавьте пакет в Intent

 Intent intent = new Intent(ActivityDiscover.this, ActivitySearch.class);
    intent .putExtra("content", data);
    startActivity(yourIntent);

Получить массив

На стороне получателя получить связку из намерения

Bundle data =  getIntent().getBundleExtra("content");

Затем получить список массивов из пакета

searchPosts2  =  data.getParcelableArrayList("mylist");
1
Hitesh Sahu 4 Май 2016 в 09:56

В классе PostObject сделайте следующее ....

   public class PostObject implements Parcelable 
   {

      ///......your class code


@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {

}

public PostObject(Parcel in) {
    super();
//    readFromParcel(in);
}

public static final Parcelable.Creator<PostObject> CREATOR = new Parcelable.Creator<PostObject>() {
    public PostObject createFromParcel(Parcel in) {
        return new PostObject(in);
    }

    public PostObject[] newArray(int size) {

        return new PostObject[size];
    }

};

}
1
Gaurav Tak 4 Май 2016 в 09:53