2013-02-16 31 views
0

我試圖從JsonActivity向doInBackground方法傳遞一個變量「chartUrl」,如下所示。我試圖改變論點,但沒有奏效。有誰知道如何做到這一點?從Activity傳遞參數到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(); 
     } 
    } 


    } 

回答

2

使用

String json = Parser.getJSONFromUrl(args[0]); 

,而不是

String json = Parser.getJSONFromUrl(chartUrl); 

在doInBackground方法和如果getChartItems得到chartUrl值是內部類活性的那麼就聲明chartUrl作爲類級別變量進行訪問在整個類

相關問題