0

これに見えるアクティビティから渡した文字列があります

                @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疑問に思っている場合に備えて、私の 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");下に移動すると(asynctask にあるもの) のonCreate下に「searchTerm を解決できない」という構文エラーが表示されます。searchTerm変数"。Intent in = getIntent();String searchTerm = in.getStringExtra("TAG_SEARCH");hasを宣言しようとしまし たが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;           

            }
4

1 に答える 1

1

あるメソッド内でフィールドを定義し、それを別のメソッドで使用しようとしています。これはscopeの不適切な使用です。クラス レベルでフィールドを定義すると、両方のメソッドで使用できます。AsyncTask がこのアクティビティの内部クラスである (同じファイル内にある) と仮定します。

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");
}
于 2013-10-30T22:36:38.770 に答える