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");
}