首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将我的API数据显示在其他页面上

无法将我的API数据显示在其他页面上
EN

Stack Overflow用户
提问于 2021-11-16 17:26:11
回答 1查看 48关注 0票数 0

我完成的代码后面紧跟着几个YouTube教程。我正在设计一个帝国时代的应用程序,它从一个公共API获取数据。当用户浏览页面时,将显示API数据的不同部分。我想让它做的是从主活动(获取应用程序接口的地方)获取数据,并将其众多数据中的一些放入UniqueUnit页面。它使用的是可序列化的东西,我还不太明白它是如何工作的。

对于记录,它在从页面'DetailedCivilization‘获取数据时有效,但在’UniqueUnit‘页面上完全中断。

MainActivity.java

代码语言:javascript
运行
复制
package com.example.ageofempires2;

import ...


public class MainActivity extends AppCompatActivity {
    public static final String TAG = "tag";
    RecyclerView itemList;
    Adapter adapter;
    List<Civilizations> all_civilizations;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().setTitle("Civilizations menu");
        all_civilizations = new ArrayList<>();
        itemList = findViewById(R.id.itemList);
        itemList.setLayoutManager(new LinearLayoutManager(this));
        adapter = new Adapter(this, all_civilizations);
        itemList.setAdapter(adapter);

        getJsonData();

    }

    private void getJsonData() {
        String URL = "https://age-of-empires-2-api.herokuapp.com/api/v1/civilizations";
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, URL, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray civilizations = response.getJSONArray("civilizations");
                    JSONObject civilizationsData = civilizations.getJSONObject(0);

                    Log.d(TAG, "onResponse "+ civilizationsData);

                    for (int i=0; i< civilizationsData.length();i++){
                        JSONObject civilization = civilizations.getJSONObject(i);
                        Civilizations v = new Civilizations();

                        v.setName(civilization.getString("name"));
                        v.setArmy_type(civilization.getString("army_type"));
                        v.setExpansion(civilization.getString("expansion"));
                        v.setCivilization_bonus(civilization.getString("civilization_bonus"));
                        v.setUnique_unit(civilization.getString("unique_unit"));

                        all_civilizations.add(v);
                        adapter.notifyDataSetChanged();
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "onErrorResponse" + error.getMessage());
            }
        });
        requestQueue.add(objectRequest);
    }
}

Adapter.java

代码语言:javascript
运行
复制
     package com.example.ageofempires2;
        
          import ...
        
        public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
            private List<Civilizations> allCivilizations;
            private Context context;
        
            public Adapter(Context ctx, List<Civilizations> civilizationsData){
                this.allCivilizations = civilizationsData;
                this.context = ctx;
            }
        
            @NonNull
            @Override
            public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.civilization_view,parent,false);
                return new ViewHolder(v);
            }
            @Override
            public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
                holder.titleName.setText(allCivilizations.get(position).getName());
        
                holder.vv.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Bundle b = new Bundle();
                        b.putSerializable("civilizationsData", allCivilizations.get(position));
                        Intent i = new Intent(context, DetailedCivilization.class);
                        i.putExtras(b);
                        v.getContext().startActivity(i);
                    }
                });
        
            }
        
            @Override
            public int getItemCount() {
                return allCivilizations.size();
            }
        
            public class ViewHolder extends  RecyclerView.ViewHolder{
                TextView titleName;
                TextView expansionName;
                View vv;
                public ViewHolder(@NonNull View itemView) {
                    super(itemView);
        
                    titleName = itemView.findViewById(R.id.civilizationUniqueUnits);
                    expansionName = itemView.findViewById(R.id.civilizationUnitDescription);
                    vv = itemView;
        
        
                }
            }
        }

Civilizations.java

代码语言:javascript
运行
复制
    package com.example.ageofempires2;
    
    import java.io.Serializable;
    
    public class Civilizations implements Serializable {
        private String name;
        private String expansion;
        private String army_type;
        private String civilization_bonus;
        private String unique_unit;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getExpansion() {
            return expansion;
        }
    
        public void setExpansion(String expansion) {
            this.expansion = expansion;
        }
    
        public String getArmy_type() {
            return army_type;
        }
    
        public void setArmy_type(String army_type) {
            this.army_type = army_type;
        }
    
        public String getCivilization_bonus() {
            return civilization_bonus;
        }
    
        public void setCivilization_bonus(String civilization_bonus) {this.civilization_bonus = civilization_bonus; }
    
        public String getUnique_unit() {
            return unique_unit;
        }
    
        public void setUnique_unit(String unique_unit) {this.unique_unit = unique_unit; }
    
    
    }

UniqueUnits.java

代码语言:javascript
运行
复制
package com.example.ageofempires2;

    import ...


public class UniqueUnit extends AppCompatActivity {

    public static final String TAG = "TAG";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_unique_unit);
        getSupportActionBar().setTitle("Unique Unit");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        Intent incomingIntent = getIntent();
        Bundle incomingName = incomingIntent.getExtras();
        Civilizations v = (Civilizations) incomingName.getSerializable("civilizationsData");
        Log.d(TAG, "onCreate: IDK MAN IT SHOULD WORK??" +incomingName);
        TextView unit = findViewById(R.id.civilizationUnitDescription);
        unit.setText(v.getUnique_unit());
    }
}

DetailedCivilization.java

代码语言:javascript
运行
复制
package com.example.ageofempires2;

    import ...


public class DetailedCivilization extends AppCompatActivity {

    public static final String TAG = "TAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detailed_civilization);
        getSupportActionBar().setTitle("Detailed view");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        Intent i = getIntent();
        Bundle data = i.getExtras();
        Civilizations v = (Civilizations) data.getSerializable("civilizationsData");

        TextView type = findViewById(R.id.civilizationType);
        type.setText(v.getArmy_type());

        TextView title = findViewById(R.id.civilizationUniqueUnits);
        title.setText(v.getName());

        TextView expansions = findViewById(R.id.civilizationUnitDescription);
        expansions.setText(v.getExpansion());

        TextView bonus = findViewById(R.id.civilizationBonus);
        bonus.setText(v.getCivilization_bonus());

        Button changeActivityTech = findViewById(R.id.tech_button);
        Button changeActivityUnit = findViewById(R.id.unit_button);
        changeActivityTech.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                activityTech();
            }
        });
        changeActivityUnit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                activityUnit();
            }
        });
    }
    private void activityTech(){
        Intent intent = new Intent(this, UniqueTech.class);
        startActivity(intent);
    }
    private void activityUnit(){
        Intent intent = new Intent(this, UniqueUnit.class);
        startActivity(intent);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if(item.getItemId() == android.R.id.home){
            onBackPressed();
        }
        return super.onOptionsItemSelected(item);
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-16 22:10:52

解决方案是

代码语言:javascript
运行
复制
private void activityUnit(Civilizations civ){
        Bundle b = new Bundle();
        b.putSerializable("civilizationsData", civ)
        Intent intent = new Intent(this, UniqueUnit.class);
        intent.putExtras(b);
        startActivity(intent);
}

在DetailedCivilization.java中,将v从行Civilizations v = (Civilizations) incomingName.getSerializable("civilizationsData");重命名为civ或更具描述性的名称

代码语言:javascript
运行
复制
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detailed_civilization);
        getSupportActionBar().setTitle("Detailed view");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        Intent i = getIntent();
        Bundle data = i.getExtras();
        Civilizations civ = (Civilizations) data.getSerializable("civilizationsData");

        TextView type = findViewById(R.id.civilizationType);
        type.setText(v.getArmy_type());

        TextView title = findViewById(R.id.civilizationUniqueUnits);
        title.setText(v.getName());

        TextView expansions = findViewById(R.id.civilizationUnitDescription);
        expansions.setText(v.getExpansion());

        TextView bonus = findViewById(R.id.civilizationBonus);
        bonus.setText(v.getCivilization_bonus());

        Button changeActivityTech = findViewById(R.id.tech_button);
        Button changeActivityUnit = findViewById(R.id.unit_button);
        changeActivityTech.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                activityTech();
            }
        });
        changeActivityUnit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                activityUnit(civ);
            }
        });
    }

并在调用activityUnit函数时传递Civilizations

基本上,当您从DetailedCivilization.java转到UniqueUnits.java时,您忘记了传递Civilizations

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69993581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档