2016-05-04 2 views
1

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

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

Какое исключение вы получаете? Какие-нибудь журналы? – Raghavendra

+1

где трассировка стека? –

ответ

1

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

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

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

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

Затем добавить сверток Intent

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

Retrive массива

В конце Ресивер получить расслоение от намерения

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

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

searchPosts2 = data.getParcelableArrayList("mylist"); 
1

в классе 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]; 
    } 

}; 

} 
+0

Я уже сделал это –

+0

@Dina, попробуйте следующее: searchPosts2 = getIntent(). GetParcelableArrayListExtra ("mylist"); –