Android中getStringExtra获取的值无法拼接至URL,报错Cannot resolve symbol
问题分析与解决方案
嘿,我一眼就看出问题啦!你遇到的这个Cannot resolve symbol 'cropcategoryname'错误,根源是变量作用域不匹配的问题。
为什么会报错?
你在onCreate()方法里定义的cropcategoryname是局部变量,它的作用范围只限于onCreate()方法内部。而你在类级别定义的url成员变量,在初始化阶段根本访问不到这个局部变量——因为此时onCreate()还没执行,cropcategoryname甚至都还没被创建出来呢!
两种可行的解决办法
方法一:把URL初始化移到onCreate()内部
如果url只需要在onCreate()里使用,直接把拼接逻辑放到获取到变量之后:
@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,此时能正常访问局部变量cropcategoryname String url = "http://dsy.impras.in/mup/cropname.php?cropcategory=" + cropcategoryname; // 后续可以用这个url做网络请求等操作 } // 删掉原来类级别定义的private String url;
方法二:先声明成员变量,再在onCreate()中赋值
如果url需要作为类的成员变量供其他方法调用,先声明变量再赋值:
// 先声明成员变量,暂不初始化 private String 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赋值 url = "http://dsy.impras.in/mup/cropname.php?cropcategory=" + cropcategoryname; }
小提醒
如果接下来要做网络请求,别忘了在AndroidManifest.xml里添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
而且不能在主线程直接发起网络请求,建议用OkHttp异步回调、Coroutines或者AsyncTask来处理哦~
内容的提问来源于stack exchange,提问作者KookyLibra
相关产品推荐
相关产品推荐

