键期望String但值是java.lang.Integer(Arrayadapter值)

时间:2015-01-23 14:19:01

标签: java android

我试图将值从一个类发送到另一个类并显示它。然而,这些值不会显示,并且我得到一个空白窗口。它没有显示任何红色错误,但在logcat中你可以找到一行文字说:Key playerList expected String但value是java.lang.Integer。所以我想由于某些原因我得到了整数而不是字符串。我不知道为什么会发生这种情况,虽然我知道我知道问题出在哪里。

所以这是我的第一个Activity,用户将字符串和广告输入到listview(适配器)。

     public class ZaidejaiActivity extends ActionBarActivity implements View.OnClickListener{
    public Button mBtnIstrinti;
    public Button mBtnPrideti;
    public Button mBtnPradeti;
    public EditText mYrasytiVarda;
    public ListView mZaidejai;

    ArrayList<String> list = new ArrayList<String>();
    ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zaidejai);
        mBtnPrideti = (Button)findViewById(R.id.pridėtiBtn);
        mBtnPrideti.setOnClickListener(this);
        mYrasytiVarda = (EditText)findViewById(R.id.VardoYrasymoBtn);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, list);

        // set the mZaidejai variable to your list in the xml

        mZaidejai=(ListView)findViewById(R.id.sarašas);
        mZaidejai.setAdapter(adapter); 
        mZaidejai.setOnItemClickListener(new AdapterView.OnItemClickListener() {

             // remove item from List.



            @Override
            public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
                    list.remove(position);
                AlertDialog.Builder builder = new AlertDialog.Builder(ZaidejaiActivity.this);
                builder.setMessage("Delete?");
                builder.setTitle("Confirm Action");
                builder.setPositiveButton("Delete", new DialogInterface.OnClickListener()
                {
                    public void onClick(DialogInterface dialog, int id)
                    {
                                adapter.notifyDataSetChanged();
                            }
                        //checked.clear();
                    });
                builder.setNegativeButton("Cancel", null);
                builder.create();
                builder.show();
            }
        });
        mBtnPradeti = (Button)findViewById(R.id.žaistiBtn);
        mBtnPradeti.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {
                    // count items
                int i;
                for (i = 0; i < adapter.getCount(); i++) {
                    String obj = adapter.getItem(i);
                    // send items to other activity
                    Intent pradetiZaidima = new Intent(v.getContext(), ZaidimasActivity.class);
                    pradetiZaidima.putExtra("playerList", adapter.getPosition(obj));
                    startActivity(pradetiZaidima);
                }
            }
        });

    };


    @Override
    public void onClick(View v) {
        String input = mYrasytiVarda.getText().toString();
        if(input.length() > 0)
        {
            // add string to the adapter, not the listview
            adapter.add(input);

            // no need to call adapter.notifyDataSetChanged(); as it is done by the adapter.add() method
        }else{
            AlertDialog alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle("Klaida:");
            alertDialog.setMessage("Blogai yrašytas vardas");
            alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
// here you can add functions
                }
            });

            alertDialog.show();
        }
    }

在此活动中,我想显示输入。:

公共课ZaidimasActivity扩展了ZaidejaiActivity {

public TextView mZaidejas;
public TextView mKlausimas;
public Button mKitasKlausimas;

ArrayList<String> listas;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_zaidimas);

    Bundle recdData = getIntent().getExtras();
    String myVal = recdData.getString("playerList");


    //listas = getIntent().getExtras().getStringArrayList("playerList");


    mZaidejas = (TextView)findViewById(R.id.ZaidejoVardas);
    mZaidejas.setText(myVal);

}

我有一个感觉,代码的错误部分是我将项目发送到其他活动的地方。 pradetiZaidima.putExtra("playerList", adapter.getPosition(obj));我认为getposition部分可以用其他东西改变,但我干的东西只显示为红色。我认为最好的解决方案是使用getList,但它也是红色的。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

问题非常简单:

当你启动意图时,你正在调用pradetiZaidima.putExtra("playerList", adapter.getPosition(obj));,它会在适配器中返回obj的位置(Integer)。

然后在String myVal = recdData.getString("playerList");您希望收到String

答案 1 :(得分:0)

替换

pradetiZaidima.putExtra("playerList", adapter.getPosition(obj));

pradetiZaidima.putExtra("playerList", obj);

因为在下一个活动中,您正在寻找带有readData.getString("playerList");

的字符串值