Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android通过单击recyclerview将jsonObject传递给另一个活动_Android_Json_Android Recyclerview_Retrofit_Pass Data - Fatal编程技术网

Android通过单击recyclerview将jsonObject传递给另一个活动

Android通过单击recyclerview将jsonObject传递给另一个活动,android,json,android-recyclerview,retrofit,pass-data,Android,Json,Android Recyclerview,Retrofit,Pass Data,我正在用Android做一个应用程序 我正在使用改型从URL()获取包含口袋妖怪名称的JSON数据。名称和类型显示在recyclerView中,单击其他活动后打开并显示攻击、防御和移动 到目前为止,我已经能够打开一个新的活动,但不知道如何传递该对象。我想没有必要通过为每个活动重新编写两次相同的代码来重新加载json 这是我的班级: public class Pokemon { private String name; private String type; priva

我正在用Android做一个应用程序

我正在使用改型从URL()获取包含口袋妖怪名称的JSON数据。名称和类型显示在recyclerView中,单击其他活动后打开并显示攻击、防御和移动

到目前为止,我已经能够打开一个新的活动,但不知道如何传递该对象。我想没有必要通过为每个活动重新编写两次相同的代码来重新加载json

这是我的班级:

public class Pokemon {

    private String name;
    private String type;
    private Integer attack;
    private Integer defense;
    private Integer evolveLevel;

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

    public String getName() {
        return name;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }

    public Integer getattack() { return attack; }

    public Integer getdefense() { return defense; }

    public Integer getEvolveLevel() { return evolveLevel; }
}
我的数据管理员:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> implements Filterable {

    private ArrayList<Pokemon> mArrayList;
    private ArrayList<Pokemon> mFilteredList;



    public DataAdapter(ArrayList<Pokemon> arrayList) {
        mArrayList = arrayList;
        mFilteredList = arrayList;

    }

    @Override
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {

        viewHolder.tv_name.setText(mFilteredList.get(i).getName());
        viewHolder.tv_version.setText(mFilteredList.get(i).getName());
        viewHolder.tv_api_level.setText(mFilteredList.get(i).getType());
    }

    @Override
    public int getItemCount() {

        return mFilteredList.size();
    }

    @Override
    public Filter getFilter() {

        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {

                String charString = charSequence.toString();

                if (charString.isEmpty()) {

                    mFilteredList = mArrayList;
                } else {

                    ArrayList<Pokemon> filteredList = new ArrayList<>();

                    for (Pokemon marraylist : mArrayList) {

                        if (marraylist.getName().toLowerCase().contains(charString) ||  marraylist.getType().toLowerCase().contains(charString)) {

                            filteredList.add(marraylist);
                        }
                    }

                    mFilteredList = filteredList;
                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = mFilteredList;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                mFilteredList = (ArrayList<Pokemon>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        private TextView tv_name,tv_version,tv_api_level;
        public ViewHolder(View view) {
            super(view);

            tv_name = (TextView)view.findViewById(R.id.tv_name);
            tv_version = (TextView)view.findViewById(R.id.tv_version);
            tv_api_level = (TextView)view.findViewById(R.id.tv_api_level);

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(view.getContext(), Main2Activity.class);
                    intent.putExtra("attack", Pokemon);
                    view.getContext().startActivity(intent);
                }
            });

        }
    }

}
公共类DataAdapter扩展了RecyclerView。适配器实现了可过滤{
私人ArrayList结婚名单;
私人阵列列表mFilteredList;
公共数据适配器(ArrayList ArrayList){
mArrayList=arrayList;
mFilteredList=arrayList;
}
@凌驾
public DataAdapter.ViewHolder onCreateViewHolder(视图组视图组,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.card_行,viewGroup,false);
返回新的ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(DataAdapter.ViewHolder-ViewHolder,int i){
viewHolder.tv_name.setText(mFilteredList.get(i).getName());
viewHolder.tv_version.setText(mFilteredList.get(i).getName());
viewHolder.tv_api_level.setText(mFilteredList.get(i.getType());
}
@凌驾
public int getItemCount(){
返回mFilteredList.size();
}
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护过滤器结果执行过滤(CharSequence CharSequence){
String charString=charSequence.toString();
if(charString.isEmpty()){
mFilteredList=结婚名单;
}否则{
ArrayList filteredList=新建ArrayList();
用于(口袋妖怪结婚名单:结婚名单){
if(marraylist.getName().toLowerCase().contains(charString)| | marraylist.getType().toLowerCase().contains(charString)){
filteredList.add(结婚名单);
}
}
mFilteredList=filteredList;
}
FilterResults FilterResults=新的FilterResults();
filterResults.values=mFilteredList;
返回过滤器结果;
}
@凌驾
受保护的无效发布结果(CharSequence CharSequence、FilterResults FilterResults){
mFilteredList=(ArrayList)filterResults.values;
notifyDataSetChanged();
}
};
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图tv_名称、tv_版本、tv_api_级别;
公共视图持有者(视图){
超级(视图);
tv_name=(TextView)view.findViewById(R.id.tv_name);
tv_version=(TextView)view.findViewById(R.id.tv_version);
tv_api_level=(TextView)view.findviewbyd(R.id.tv_api_level);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent Intent=新意图(view.getContext(),Main2Activity.class);
意图。putExtra(“攻击”,口袋妖怪);
view.getContext().startActivity(intent);
}
});
}
}
}
最后是我的主要活动:

public class MainActivity extends AppCompatActivity {

    public static final String BASE_URL = "http://kerast.com";
    private RecyclerView mRecyclerView;
    private ArrayList<Pokemon> mArrayList;
    private DataAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        initViews();
        loadJSON();
    }

    private void initViews(){
        mRecyclerView = (RecyclerView)findViewById(R.id.card_recycler_view);
        mRecyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(layoutManager);
    }
    private void loadJSON(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RequestInterface request = retrofit.create(RequestInterface.class);
        Call<JSONResponse> call = request.getJSON();
        call.enqueue(new Callback<JSONResponse>() {
            @Override
            public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {

                JSONResponse jsonResponse = response.body();
                mArrayList = new ArrayList<>(Arrays.asList(jsonResponse.getPokemons()));
                mAdapter = new DataAdapter(mArrayList);
                mRecyclerView.setAdapter(mAdapter);
            }

            @Override
            public void onFailure(Call<JSONResponse> call, Throwable t) {
                Log.d("Error",t.getMessage());
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_main, menu);

        MenuItem search = menu.findItem(R.id.search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(search);
        search(searchView);
        return true;
    }

    private void search(SearchView searchView) {

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {

                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {

                mAdapter.getFilter().filter(newText);
                return true;
            }
        });
    }
}
public类MainActivity扩展了AppCompatActivity{
公共静态最终字符串BASE_URL=”http://kerast.com";
私人回收视图mRecyclerView;
私人ArrayList结婚名单;
专用数据适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
initViews();
loadJSON();
}
私有void initViews(){
mRecyclerView=(RecyclerView)findViewById(R.id.card\u recycler\u视图);
mRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(此);
mRecyclerView.setLayoutManager(layoutManager);
}
私有void loadJSON(){
改装改装=新改装.Builder()
.baseUrl(基本URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface请求=reformation.create(RequestInterface.class);
Call Call=request.getJSON();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
JSONResponse=response.body();
mArrayList=newarraylist(Arrays.asList(jsonResponse.getPokemons());
mAdapter=新数据适配器(mArrayList);
mRecyclerView.setAdapter(mAdapter);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.d(“Error”,t.getMessage());
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单菜单菜单主菜单);
MenuItem search=menu.findItem(R.id.search);
SearchView SearchView=(SearchView)MenuItemCompat.getActionView(搜索);
搜索(searchView);
返回true;
}
专用无效搜索(SearchView SearchView){
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回false;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
mAdapter.getFilter().filter(newText);
//send : 
intent.putExtra("Pokemon", obj);
//retrieve :
getIntent().getSerializableExtra("MyClass");
//Sending data
intent.putExtra("String name", object);

//Receving end
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    Pokemon pokemon = (Pokemon) bundle.getParcelable("String name")
}