我正在尝试将JsonActivity的变量“ chartUrl”传递给doInBackground方法,如下所示。我试图更改参数,但这没有用。有谁知道如何做到这一点?
提前致谢
代码:
公共类JsonActivity扩展了ListActivity {
private ProgressDialog progressDialog;
// JSON Node names
private static final String TAG_RANK = "rank";
private static final String TAG_NAME = "name";
String chartUrl;
String[] urlNames = new String[] {
"myurls"
};
// chartItemList holds the chart items
ArrayList<HashMap<String, String>> chartItemList = new ArrayList<HashMap<String,
String>>();
JsonParser Parser = new JsonParser();
JSONArray chartItems = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.listlayout);
//Get the bundle from other activity
Bundle bundle = getIntent().getExtras();
//Extract chart index from the bundle
int chartIndex = bundle.getInt("chartIndex");
String chartUrl = urlNames[chartIndex];
//Check if the user has a connection
ConnectivityManager cm = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info != null) {
if (!info.isConnected()) {
Toast.makeText(this, "Please check your connection and try again.",
Toast.LENGTH_SHORT).show();
}
//if positive, fetch the articles in background
else new getChartItems().execute(chartUrl);
}
//else show toast
else {
Toast.makeText(this, "Please check your connection and try again.",
Toast.LENGTH_SHORT).show();
}
}
class getChartItems extends AsyncTask<String, String, String> {
// Shows a progress dialog while setting up the background task
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(JsonActivity.this);
progressDialog.setMessage("Loading chart...");
progressDialog.setIndeterminate(false);
progressDialog.setCancelable(false);
progressDialog.show();
}
//Gets the json data for chart items data and presents it in a list view
@Override
protected String doInBackground(String... args) {
String json = Parser.getJSONFromUrl(chartUrl);
String rank;
String name;
try{
chartItems = new JSONArray(json);
JSONObject json_data=null;
for(int i=0;i<chartItems.length();i++){
json_data = chartItems.getJSONObject(i);
rank=json_data.getString("rank");
name=json_data.getString("name");
HashMap<String, String> hashMap = new HashMap<String, String>();
// adding each child node to HashMap key => value
hashMap.put(TAG_RANK, rank);
hashMap.put(TAG_NAME, name);
// adding HashMap to ArrayList
chartItemList.add(hashMap);
}
;
}
catch (JSONException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
public void run() {
System.out.println(chartItemList);
//updates the list view with the parsed items
ListAdapter adapter = new SimpleAdapter(JsonActivity.this, chartItemList,
R.layout.list_item,
new String[] {TAG_RANK,TAG_NAME, }, new int[]
{R.id.rank ,R.id.name});
setListAdapter(adapter);
}
});
return null;
}
//Removes the progress dialog when the data has been fetched
protected void onPostExecute(String args) {
progressDialog.dismiss();
}
}
}
最佳答案
采用
String json = Parser.getJSONFromUrl(args[0]);
代替
String json = Parser.getJSONFromUrl(chartUrl);
用于在doInBackground方法中获取
chartUrl
值,并且如果getChartItems
是Activity的内部类,则只需将chartUrl
声明为类级别变量即可在整个类中进行访问关于java - 将参数从Activity传递到异步任务的doInBackground方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14911633/