我正在尝试将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/

10-10 06:28