Android 接收传递字符串
我有一个字符串,我从一个看起来像Android 接收传递字符串,android,Android,我有一个字符串,我从一个看起来像 @Override public void onClick(View v) { ...... String searchTerm = et.getText().toString().trim(); Intent in = new Intent(PassingString.this
@Override
public void onClick(View v) {
......
String searchTerm = et.getText().toString().trim();
Intent in = new Intent(PassingString.this, RecieveString.class);
in.putExtra("TAG_SEARCH", searchTerm);
startActivity(in);
在我的另一个活动中,这是我接收这个字符串并将其编码到我的web地址的方式。
(et
只是我的编辑文本,以防你想知道在哪里)
我试图将代码从我的doInbackGround
方法中移出以接收此字符串,这会减慢速度,只是当我在=getIntent()中移动Intent时;String searchTerm=in.getStringExtra(“标记搜索”)在onCreate
下的code>我在searchTerm
下得到一个语法错误(asynctask中的一个),它说“searchTerm无法解析为变量”。我曾尝试在=getIntent()中声明Intent;String searchTerm=in.getStringExtra(“标记搜索”)代码>具有final
,但它不会改变任何内容。我甚至试着把它放到onPreExecute
中,但它仍然没有改变任何事情。有人能帮我解决这个致命的语法错误吗
这是我接收字符串的活动
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.listview);
Intent in = getIntent();
String searchTerm = in.getStringExtra("TAG_SEARCH");
questionList = new ArrayList<HashMap<String, String>>();
mTask = new LoadAllData();
mTask.execute();
}
@Override
public void onBackPressed()
{
/** If user Pressed BackButton While Running Asynctask
this will close the ASynctask.
*/
if (mTask != null && mTask.getStatus() != AsyncTask.Status.FINISHED)
{
mTask.cancel(true);
}
super.onBackPressed();
}
@Override
protected void onDestroy() {
if (mTask != null && mTask.getStatus() != AsyncTask.Status.FINISHED)
{
mTask.cancel(true);
}
super.onDestroy();
}
@Override
protected void onPause() {
if (pDialog != null)
{
if(pDialog.isShowing())
{
pDialog.dismiss();
}
super.onPause();
}
}
class LoadAllData extends AsyncTask<String, Void, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ListView.this);
pDialog.setMessage("Loading Data. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
JSONObject json = new JSONObject();
try {
String query = URLEncoder.encode(searchTerm, "utf-8");
String URL = "http://example.com"+ query + "json";
JSONParsser jParser = new JSONParsser();
json = jParser.readJSONFeed(URL);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//setContentView(R.layout.listview);
Intent in=getIntent();
String searchTerm=in.getStringExtra(“标记搜索”);
questionList=新的ArrayList();
mTask=new LoadAllData();
mTask.execute();
}
@凌驾
public void onBackPressed()
{
/**如果用户在运行Asynctask时按下BackButton
这将关闭异步任务。
*/
if(mTask!=null&&mTask.getStatus()!=AsyncTask.Status.FINISHED)
{
mTask.cancel(true);
}
super.onBackPressed();
}
@凌驾
受保护的空onDestroy(){
if(mTask!=null&&mTask.getStatus()!=AsyncTask.Status.FINISHED)
{
mTask.cancel(true);
}
super.ondestory();
}
@凌驾
受保护的void onPause(){
如果(pDialog!=null)
{
if(pDialog.isShowing())
{
pDialog.disclose();
}
super.onPause();
}
}
类LoadAllData扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=newprogressdialog(ListView.this);
pDialog.setMessage(“正在加载数据,请稍候…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
@凌驾
受保护的JSONObject doInBackground(字符串…args){
JSONObject json=新的JSONObject();
试一试{
字符串查询=URLEncoder.encode(搜索词,“utf-8”);
字符串URL=”http://example.com“+query+json”;
JSONPARSER jParser=新的JSONPARSER();
json=jParser.readJSONFeed(URL);
}捕获(不支持的编码异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回json;
}
您试图在一个方法中定义一个字段,并在另一个方法中使用它,这是不正确的。在类级别定义该字段,您可以在两个方法中使用它-假设您的AsyncTask是此活动的内部类(它位于同一文件中)
编辑:感谢您发布代码-按照您的设置方式,您应该将字符串作为变量传递给execute方法。然后您可以通过访问args数组在doInBackground方法中访问它:
@Override
protected JSONObject doInBackground(String... args) {
[...]
String searchTerm = args[0];
String query = URLEncoder.encode(searchTerm, "utf-8");
}
如果您添加了修改后的代码块,这将有助于我们更清楚地看到和跟踪您的更改。感谢发布您的代码,我更新了我的答案。如果它们实际上在两个独立的类中,我经常求助于创建第三个类,由静态
变量组成,我可以在任何范围内使用,您可能会遇到问题doing这一点-在Android中,有很多方法可以将变量传递给不同的组件并保持状态,通过使用静态变量,您可能会在应用程序空闲时对变量进行垃圾收集,从而在用户恢复应用程序时导致崩溃。我是否必须更改将此字符串传递给活动的方式?Y你不应该这么做,你还在遇到问题吗?如果你有不同的问题,你应该开始一个新的问题。
private String searchTerm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
[...]
searchTerm = getIntent().getStringExtra("TAG_SEARCH");
}
@Override
protected JSONObject doInBackground(String... args) {
[...]
String query = URLEncoder.encode(searchTerm, "utf-8");
}
@Override
protected JSONObject doInBackground(String... args) {
[...]
String searchTerm = args[0];
String query = URLEncoder.encode(searchTerm, "utf-8");
}