接收传递的字符串

时间:2013-10-30 21:39:32

标签: android

我有一个字符串,我从一个看起来这个

的活动传递过来
                @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);

在我的其他活动中,这是我收到此字符串并将其编码到我的网址的方式。 (et只是我的editText,万一你想知道)

        @Override
        protected JSONObject doInBackground(String... args) {
             ....

                Intent in = getIntent();
                String searchTerm = in.getStringExtra("TAG_SEARCH");
                String query = URLEncoder.encode(searchTerm, "utf-8");
                String URL = "http://example.com"+ query + "json";

我正在尝试移动代码以便从我的doInbackGround方法中接收此字符串,这会减慢速度,只是当我在Intent in = getIntent();String searchTerm = in.getStringExtra("TAG_SEARCH");下移动onCreate时出现语法错误在searchTerm(asynctask中的那个)下面写着“searchTerm无法解析为变量”。我曾尝试声明Intent in = getIntent();String searchTerm = in.getStringExtra("TAG_SEARCH");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;           

            }

1 个答案:

答案 0 :(得分:1)

您正在尝试在一个方法中定义一个字段,并在另一个方法中使用它,这是对scope的错误使用。在类级别定义字段,您可以在两种方法中使用它 - 假设您的AsyncTask是此Activity的内部类(它位于同一文件中)。

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

编辑:感谢您发布代码 - 您设置它的方式,您应该将字符串作为变量传递给execute方法。然后,您可以通过访问args数组在doInBackground方法中访问它:

@Override
protected JSONObject doInBackground(String... args) {
    [...]
    String searchTerm = args[0];
    String query = URLEncoder.encode(searchTerm, "utf-8");
}