我有一个字符串,我从一个看起来这个
的活动传递过来 @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;
}
答案 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");
}