2012-09-07 53 views
0

我有兩個類,「XMLParser.java」擴展活動並導入「ClassAsyncTask.java」(來自我自己的庫)。現在我的XMLParser有問題,它說線性佈局不可見,我該如何解決這個錯誤?感謝LinearLayout(linearLayout)如何在我的課堂中可見?

public class XMLParser extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ClassAsyncTask aObj = new ClassAsyncTask(
      "http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml", this); 
    aObj.execute(); 

    //THIS IS MY PROBLEM, "The field ClassAsyncTask.linearLayout is not visible" 
    aObj.linearLayout = new LinearLayout(this); 
    aObj.linearLayout.setOrientation(1); 

    /* Set the ContentView to layout for display */ 
    this.setContentView(aObj.linearLayout); 

} 

} 

這是一個由XMLParser.java進口ClassAsyncTask.java(從我自己的圖書館)

public class ClassAsyncTask extends AsyncTask<String, Void, String> { 


String targetURL; 
TextView name[], website[], category[]; 
LinearLayout linearLayout; 
Context context; 

public ClassAsyncTask(String site, Context ctx){ 
    targetURL = site; 
    context = ctx; 
} 


@Override 
protected String doInBackground(String... urls) { 

    try { 

     /* Handling XML */ 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 
     XMLReader xr = sp.getXMLReader(); 

     /* Send URL to parse XML Tags */ 
     URL sourceUrl = new URL(targetURL); 

     /* Create handler to handle XML Tags (extends DefaultHandler) */ 
     MyXMLHandler myXMLHandler = new MyXMLHandler(); 
     xr.setContentHandler(myXMLHandler); 
     xr.parse(new InputSource(sourceUrl.openStream())); 

    } catch (Exception e) { 
     System.out.println("XML Pasing Excpetion = " + e); 
    } 
    return null; 
} 

/* Return-value from doInBackground */ 
protected void onPostExecute(String result) { 

    /* Get result from MyXMLHandler SitlesList Object */ 
    SiteList sitesList = MyXMLHandler.sitesList; 

    /* Assign TextView array length by arrayList size */ 
    name = new TextView[sitesList.getName().size()]; 
    website = new TextView[sitesList.getName().size()]; 
    category = new TextView[sitesList.getName().size()]; 

    int h = sitesList.getName().size(); 
    /* Set the result text in TextView and add it to layout */ 
    for (int i = 0; i < h; i++) { 

     name[i]= new TextView(getApplicationContext()); 
     name[i].setText("Name = " + sitesList.getName().get(i)); 
     website[i]= new TextView(getApplicationContext()); 
     website[i].setText("Website = " + sitesList.getWebsite().get(i)); 
     category[i]= new TextView(getApplicationContext()); 
     category[i].setText("Website Category = " + sitesList.getCategory().get(i)); 
     linearLayout.addView(name[i]); 
     linearLayout.addView(website[i]); 
     linearLayout.addView(category[i]); 

    } 
} 

} 

回答

0

我建議你不要訪問LinearLayout這種方式,而是具有setter和獲得者。

在你ClassAsyncTask.java

LinearLayout linearLayout; 

public void setLinearLayout(LinearLayout linearLayout){ 
    this.linearLayout = linearLayout; 
} 


public LinearLayout getLinearLayout(){ 
    return linearLayout; 
} 

,然後在XMLParser.java,只是LinearLayout myLinearLayout = aobj.getLinearLayout()你要佈局的編輯,然後通過aobj.setLinearLayout(myLinearLayout)將其返回到ClassAsyncTask

+0

在我的XMLParser.java中仍然有紅線,消息是「setLinearLayout()中的方法getLinearLayout()未定義類型ClassAsyncTask」。 – aaaaAndroid

+0

哦,我明白了,謝謝。我認爲這是eclipse中的一個錯誤,我一直保存它,但是當我退出程序並再次打開它時。它正在工作。 – aaaaAndroid

+0

@aaaaAndroid Eclipse中的大部分問題都可以通過Project> Clean來解決。 :) – Zarah