在android中将值从一个活动传递到另一个活动

时间:2013-02-21 07:17:54

标签: android android-activity

您好我开发了一个应用程序,当我在文本框中输入一个数字时,它有一个文本框和一个搜索按钮,然后单击搜索按钮,它需要将输入的值传递给它使用该值的下一个活动从数据库中获取值。

我使用以下代码传递值。

search_button.setClickable(true);
      search_button.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        String outlet_no = outlet_id.getText().toString();
        System.out.println(outlet_no);
        if(!outlet_no.isEmpty()){
        @SuppressWarnings("deprecation")
        SharedPreferences myPrefs = getApplicationContext().getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
        SharedPreferences.Editor prefsEditor = myPrefs.edit();

        prefsEditor.putString("outlet_id", outlet_no);
        prefsEditor.commit();

        Intent myIntent = new Intent(HomeActivity.this, StoreActivity.class);       
        startActivity(myIntent);
        HomeActivity.this.startActivity(myIntent);
        }
        else{
          Toast.makeText(getApplicationContext(), "Please enter an outlet id", Toast.LENGTH_SHORT);
        }  
      }
    });

我的问题是它没有传递价值。任何人都可以帮助我,也可以解释我上面的代码,因为我没有写它,我发现很难理解它。

StoreActivity方

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.store);      
        myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);             
        mOutletID = myPrefs.getString("outlet_id", "0");
        mOutletDetails = myPrefs.getString("outlet_details","{}");
        Log.v("outlet_details",myPrefs.getString("outlet_details","{}"));
        if(mOutletDetails != "{}"){
            setOutletData(mOutletDetails);
        }
        else{
            executeAjaxRequest();
        }
    }    

8 个答案:

答案 0 :(得分:9)

你犯了错误:

1)您为什么要尝试两次开始活动?

startActivity(myIntent);   // this is OK
HomeActivity.this.startActivity(myIntent);

2)要将输入的文本从一个活动传递到另一个活动,您可以使用Intent的putExtra()方法,例如:

myIntent.putExtra("SearchText", outlet_no);

所以你的完整代码是:

 Intent myIntent = new Intent(HomeActivity.this, StoreActivity.class);   
 myIntent.putExtra("SearchText", outlet_no);    
 startActivity(myIntent);

3)要获得您从第一项活动传递的价值:

Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String outlet_no= bundle.getString("SearchText");

4)SharedPreferences:

仅供参考,SharedPreference用于保存少量数据,这些数据可以在以后的应用程序中引用和使用。

您应该参考以下链接:

  1. SharedPreferences
  2. Intent
  3. Intent and Intent Filters

答案 1 :(得分:3)

Intent myIntent = new Intent(HomeActivity.this, StoreActivity.class);
myIntent.putExtra("searchString", outlet_no);       
startActivity(myIntent);

这会将searchString发送到StoreActivity

并在StoreActivity中,您可以使用以下方式检索值:

String s = getIntent.getStringExtra("searchString");

答案 2 :(得分:2)

在onClick方法中,请输入以下代码:

    String outlet_no = outlet_id.getText().toString();
    if(!outlet_no.isEmpty()){
        Intent myIntent = new Intent(HomeActivity.this, StoreActivity.class);  
        myIntent.putExtra("outlet_id",outlet_no);
        startActivity(myIntent);
    }
    else{
        Toast.makeText(getApplicationContext(), "Please enter an outlet id", Toast.LENGTH_SHORT);
    }  

现在在StoreActivity中,在onCreate()方法中有类似这样的内容:

String outlet_no = getIntent().getStringExtra("outlet_id");  
if (outlet_no != null) //Just a defensive check
   //Start your processing

答案 3 :(得分:1)

您也可以使用Intents。

说,我们有2项活动:SourceActivity& DestinationActivity 我们希望将SourceActivity的值传递给DestinationActivity

按钮OnClickListener中的

String str_outlet_no = outlet_no.getText().toString();
Intent intent = new Intent(SourceActivity.this, DestinationActivity.class);
intent.putExtra("outlet_no_key", outlet_no);
startActivity(intent);

在DestinationActivity的另一边:

Intent intent = getIntent();
String desi = intent.getStringExtra("outlet_no");

并从数据库中搜索 desi

答案 4 :(得分:0)

您可以尝试这样的事情: -

活动A

myIntent.putExtra(var, value); // Putting the value
startActivity(myIntent);

活动B

String value = getIntent().getStringExtra(var); // Getting the value

答案 5 :(得分:0)

最简单的方法是将会话ID传递给您用于启动活动的意图中的注销活动:

Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent)

Intents的docs有更多信息(请查看标题为“Extras”的部分)。

答案 6 :(得分:-1)

您可以简单地将其写为

Intent myIntent = new Intent(HomeActivity.this, StoreActivity.class);
      myIntent.putExtra("outlet_no",outlet_no);
        startActivity(myIntent);  

让我知道这是否有效。

答案 7 :(得分:-1)

活动A

myIntent.putExtra(var, value); // Putting the value
startActivity(myIntent);

活动B

String value = getIntent().getStringExtra(var); // Getting the value