2012-09-07 21 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