getStringExtra()值未在URL中设置

时间:2018-01-07 15:40:06

标签: android

我已经从第一个屏幕通过putExtra传递了一个值,并通过getStringExtra方法获取到第二个屏幕。为了确认我已收到该值,我在第二个屏幕上将其作为TextView传递,然后我就能得到它。

现在我将此值传递给url,但android studio正在显示红线。在鼠标滚动期间,它显示以下错误。

  

无法解析符号' cropcategoryname'

代码如下。

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

    TextView txtName = (TextView) findViewById(R.id.cropCategoryName);
    Intent i = getIntent();
    String cropcategoryname = i.getStringExtra("cropCategoryName");
    txtName.setText(cropcategoryname);
    } private String url = "http://dsy.impras.in/mup/cropname.php?cropcategory=" + cropcategoryname;

我认为这是一个简单的问题,但我已经坚持了一段时间。

3 个答案:

答案 0 :(得分:3)

String cropcategoryname = i.getStringExtra("cropCategoryName");

这是onCreate()方法中的局部变量。

private String url = "http://dsy.impras.in/mup/cropname.php?cropcategory=" + cropcategoryname;

这是活动类中的实例字段。执行此代码时,onCreate()中的局部变量不存在。

我建议您了解变量范围和活动生命周期。由于url的值依赖于仅在onCreate()中可用的值,因此必须在该方法中初始化url,而不是与其字段声明内联:

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

    TextView txtName = (TextView) findViewById(R.id.cropCategoryName);
    Intent i = getIntent();
    String cropcategoryname = i.getStringExtra("cropCategoryName");
    txtName.setText(cropcategoryname);
    url = "http://dsy.impras.in/mup/cropname.php?cropcategory=" + cropcategoryname;
}

private String url;

答案 1 :(得分:0)

试试这个:

onCreate之前的CropnameActivity中使用它:

private static final String EXTRA_NAME = "EXTRA_NAME";
private String cropcategoryname;
private String url = "http://dsy.impras.in/mup/cropname.php?cropcategory=";

private static Intent createIntent(Context context, String cropCategoryName) {
    Intent intent = new Intent(context, CropnameActivity .class);
    intent.putExtra(EXTRA_NAME, cropCategoryName);
    return intent;
}

public static void startActivity(Activity activity, String cropCategoryName) {
    activity.startActivity(createIntent(activity, cropCategoryName));
}
来自MainActivity的

执行此操作:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
          String cropCategoryName =((TextView)view.findViewById(R.id.cropCategoryName)).getTex‌​t().toString(); 
          Toast.makeText(getApplicationContext(),cropCategoryName,Toas‌​t.LENGTH_SHORT).show‌​();
          CropnameActivity.startActivity(MainActivity.this, cropCategoryName);
     });

然后检索您的String

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

    TextView txtName = (TextView) findViewById(R.id.cropCategoryName);
    cropcategoryname = getIntent().getStringExtra(EXTRA_NAME);
    if(cropcategoryname != null) txtName.setText(cropcategoryname);
}

之后你可以使用url String:

if(cropcategoryname != null) {
   String finalUrl = url + cropcategoryname;
}

希望它有所帮助!!!

答案 2 :(得分:-1)

只需在onCreate方法上方初始化cropcategoryname字符串变量。

    String cropcategoryname="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_item);

    TextView txtName = (TextView) findViewById(R.id.cropCategoryName);
    Intent i = getIntent();
    cropcategoryname = i.getStringExtra("cropCategoryName");
    txtName.setText(cropcategoryname);
    } private String url = "http://dsy.impras.in/mup/cropname.php?cropcategory=" + cropcategoryname;