如何从另一个类访问变量? Android的Java的

如何从另一个类访问变量? Android的Java的

问题描述:

花了几个小时试图弄清楚为什么在“魂”的方法不能由“下载类阅读“finalURL”变量?会很感激任何指针..如何从另一个类访问变量? Android的Java的

这是一个词汇改良中的应用,所以它从字典API获取XML数据。

public class DefineWord extends Activity { 

    static final String head = new String("http://www.dictionaryapi.com/api/v1/references/collegiate/xml/"); 
    static final String apikey = new String("?key=xxxxxx-xxx-xxx-xxxx-xxxxx"); 

    TextView src; 
    EditText searchBar; 

OnCreate中:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.defineword); 

     src=(TextView)findViewById(R.id.textFromWeb); 
     searchBar = (EditText)findViewById(R.id.searchBar); 
    } 

fetch方法:

public void fetch(View v){            //onClick in xml starts this "fetch" method 

     String w = searchBar.getText().toString();       // get the text the user enters into searchbar 
     String finalURL = head.trim() + w.trim() + apikey.trim();   //concatenate api url 

     Downloader d = new Downloader(); 
     d.execute(finalURL);            // Calls AsyncTask to connect in the background.  
} 

的AsyncTask:

class Downloader extends AsyncTask<String,Void,String>{ 

     ArrayList<String> information = new ArrayList<String>(); // Store fetched XML data in ArrayList 

     public String doInBackground(String... urls) { 
      String result = null; 

      try { 

       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder builder = factory.newDocumentBuilder(); 

的问题是在这里。 “finalURL”不能被解析为一个变量。

   Document doc = builder.parse(finalURL); //finalURL cannot be resolved to a variable ??? 

       doc.getDocumentElement().normalize(); 

       NodeList nList = doc.getElementsByTagName("entry"); // Make a list of all elements in XML file with tag name "entry" 

       for (int temp = 0; temp < nList.getLength(); temp++) { //Iterate over elements and get their attributes (Definition, etymology...) 

        Node nNode = nList.item(temp); 

        if (nNode.getNodeType() == Node.ELEMENT_NODE){ 


         Element eElement = (Element) nNode; 

         String element = ("\nCurrent Element : " + eElement.getAttribute("id")); 
         information.add(element); // 

         String definitions = ("\nDefinition : \n" + eElement.getElementsByTagName("dt").item(0).getTextContent()); 
         information.add(definitions); 
        } 

       } 

      }catch (ParserConfigurationException e){ 
       e.printStackTrace(); 

      }catch(SAXException e){ 
       e.printStackTrace(); 
      }catch(IOException e){ 
       e.printStackTrace(); 
      } 

      return result; 
     } 

     protected void onPostExecute (String result){ 

      String finalresult = information.toString(); 
      src.setText(finalresult); 
     } 

    } 
} 

感谢您的时间。

这就是所谓的参数。通过使用asyncTask.execute(parameter)你的对象传递给doInBackground(String... arrayOfParameters)

所以再次访问该值,你应该使用builder.parse(urls[0]);

+0

哇!非常感谢。我不敢相信这很容易。大声笑。希望你有美好的一天;希望你今天过得很开心。荣誉。 –

finalURL声明的fetch方法内,因此只能在这个函数中进行访问。

如果您希望它在整个程序中都可以访问,请在函数之外声明它,如下所示。

class MyClass{ 
    public static String finalURL; // variable declaration 

    public void fetch(View v){ 
     finalURL = head.trim() + w.trim() + apikey.trim(); // variable assignment 
    }  

    public void otherFunction(){ 
     Document doc = builder.parse(finalURL); // retrieves static class variable 
    } 
} 

我希望这能回答你的问题。如果没有,请让我知道混淆是什么。