在活动之间传递价值时出错

时间:2014-09-02 19:10:27

标签: android parse-platform

我有一个活动,其中包含一个编辑文本,当单击一个按钮时该文本变为可见。我填写编辑文本并单击另一个按钮。单击此按钮时,编辑文本内容必须发送到另一个活动。第一个活动获取编辑文本并查询来自我的Parse数据库的数据列表,并在第二个Activity中的ListView中显示它。但是每当我单击第一个按钮时(输入字符串后)应用程序崩溃。这是第一个活动

public class MainActivity extends ActionBarActivity {
    String name;
    EditText search;
    Button g;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setUpSpinners();
        Parse.initialize(this, "AAh5US7zhbYyFBexsv07cjo34ZZiB7KNe9SuTv7e",
                "eKUG1pYaV50hVyDC9d4qZc4qf1dCtOTqnX92eGJV");
        PushService.setDefaultPushCallback(this, MainActivity.class);
        ParseInstallation.getCurrentInstallation();
        search = (EditText) findViewById(R.id.search);
        g = (Button) findViewById(R.id.Go);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void byName(View v) {
        search.setVisibility(View.VISIBLE);
        search.requestFocus();
        g.setVisibility(View.VISIBLE);
    }

    public void Go(View v) {
        name = search.getText().toString();
        final Intent i;
        i = new Intent(MainActivity.this, ResterauntList1.class);
        i.putExtra("restrauntName", name);
        startActivity(i);
    }
}

在上面的byName中是用于使EditText可见的onClick,而Go是用于获取我的EditText字符串并将其传递给下一个活动的onClick。第二项活动低于

public class ResterauntList1 extends Activity {
    String rValue;
    ArrayAdapter<String> adapter;
    ProgressDialog mProgressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_resteraunt_list1);

        Bundle bdl = getIntent().getExtras();
        rValue = bdl.getString("restrauntName");
        setContentView(R.layout.activity_resteraunt_list);
        populateList(rValue, "name");

    }

    private void populateList(final String Value, final String Key) {
        ParseQueryAdapter.QueryFactory<ParseObject> factory = new ParseQueryAdapter.QueryFactory<ParseObject>() {

            @Override
            @SuppressWarnings({ "unchecked", "rawtypes" })
            public ParseQuery create() {
                ParseQuery query = new ParseQuery("resdb");
                query.whereEqualTo(Key, Value);
                return query;
            }
        };
        ParseQueryAdapter<ParseObject> adapter = new ParseQueryAdapter<ParseObject>(
                this, factory);
        adapter.setTextKey("name");
        adapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {

            @Override
            public void onLoading() {
                mProgressDialog = new ProgressDialog(ResterauntList1.this);
                mProgressDialog.setTitle("Searching for " + Value);
                mProgressDialog.setMessage("Loading...");
                mProgressDialog.setIndeterminate(false);
                mProgressDialog.show();
            }

            @Override
            public void onLoaded(List<ParseObject> objects, Exception e) {
                mProgressDialog.dismiss();
            }
        });

        final ListView listView = (ListView) findViewById(R.id.restListView1);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                ParseObject object = (ParseObject) listView
                        .getItemAtPosition(position);
                String Id = object.getObjectId();
                Intent i = new Intent(getApplicationContext(),
                        SingleRestraunt.class);
                i.putExtra("restId", Id);
                startActivity(i);

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.resteraunt_list1, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

单击Go按钮时会出现上述错误。错误是

09-02 14:58:46.443: E/AndroidRuntime(3061): Process: com.example.gastronomaapp, PID: 3061
09-02 14:58:46.443: E/AndroidRuntime(3061): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.gastronomaapp/com.example.gastronomaapp.ResterauntList1}: java.lang.NullPointerException

知道我犯了哪个错误吗?最有趣的事情几乎相同的代码在我的应用程序的另一部分工作。绝对无能为力。

1 个答案:

答案 0 :(得分:2)

Bundle bdl = getIntent().getExtras();
        rValue = bdl.getString("restrauntName");

更改为

    rValue = getIntent().getStringExtra("restrauntName");

您将字符串直接放在intent上,而不是打包在捆绑包中。