いいえ。私はボタンが付いたメインUIを持っています。ユーザーがボタンの1つをクリックすると、別のアクティビティーによって作成されたリストビューが表示されます。このアクティビティを単独で実行すると、それ自体のアプリとして機能しますが、大きなアプリのコンポーネントとして使用しようとすると、アプリが停止します。ここで私は呼んしようとしている活動のためのコードです。メインUIからのリストビューアクティビティの起動に問題がある* ANDROID *
XMLfunctions.java
:table.java
public class Table extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_table);
ListView lv= (ListView)findViewById(R.id.listview);
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
String xml = XMLfunctions.getXML();
Document doc = XMLfunctions.XMLfromString(xml);
int numResults = XMLfunctions.numResults(doc);
if((numResults <= 0)){
Toast.makeText(Table.this, "Nothing to show.", Toast.LENGTH_LONG).show();
finish();
}
NodeList nodes = doc.getElementsByTagName("team");
for (int i = 0; i < nodes.getLength(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element)nodes.item(i);
map.put("rowid", XMLfunctions.getValue(e, "id"));
map.put("name", XMLfunctions.getValue(e, "name"));
map.put("w", XMLfunctions.getValue(e, "w"));
map.put("d", XMLfunctions.getValue(e, "d"));
map.put("l", XMLfunctions.getValue(e, "l"));
map.put("gd", XMLfunctions.getValue(e, "gd"));
map.put("pts", XMLfunctions.getValue(e, "pts"));
mylist.add(map);
}
//Make a new listadapter
ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.grid_item,
new String[] { "rowid", "name", "w" , "d", "l", "gd", "pts"},
new int[] {R.id.item1, R.id.item2, R.id.item3, R.id.item4, R.id.item5, R.id.item6, R.id.item7 });
lv.setAdapter(adapter);
}
はtable.javaの活動は、このクラスが引くことをxmlデータを解析し、
:public class XMLfunctions { public final static Document XMLfromString(String xml){ Document doc = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(xml)); doc = db.parse(is); } catch (ParserConfigurationException e) { System.out.println("XML parse error: " + e.getMessage()); return null; } catch (SAXException e) { System.out.println("Wrong XML file structure: " + e.getMessage()); return null; } catch (IOException e) { System.out.println("I/O exeption: " + e.getMessage()); return null; } return doc; } /** Returns element value * @param elem element (it is XML tag) * @return Element value otherwise empty String */ public final static String getElementValue(Node elem) { Node kid; if(elem != null){ if (elem.hasChildNodes()){ for(kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling()){ if(kid.getNodeType() == Node.TEXT_NODE ){ return kid.getNodeValue(); } } } } return ""; } public static String getXML(){ String line = null; try { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("http://adasoccerclub.org/get_json.php"); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); line = EntityUtils.toString(httpEntity); } catch (UnsupportedEncodingException e) { line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; } catch (MalformedURLException e) { line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; } catch (IOException e) { line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; } return line; } public static int numResults(Document doc){ Node results = doc.getDocumentElement(); int res = -1; try{ res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue()); }catch(Exception e){ res = -1; } return res; } public static String getValue(Element item, String str) { NodeList n = item.getElementsByTagName(str); return XMLfunctions.getElementValue(n.item(0)); }
最後に、ここでのデバッグからLogCatです
03-05 23:43:54.858:E/AndroidRuntime(9190):致命的な例外:メイン
03-05 23:43:54.858:E/AndroidRuntime(9190):java.lang.RuntimeException:にできませんアクティビティを開始するComponentInfo {com.example.club/com.example.club.Table}:android.os.NetworkOnMainThreadException
03-05 23:43:54.858:E/AndroidRuntime(9190):android.app.ActivityThread .performLaunchActivity(ActivityThread.java:1955)
03-05 23:43:54.858:E/AndroidRuntime(9190):android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)で
03-05 23:43:54.858:E/AndroidRuntime(9190):
03-05 23(ActivityThread.java:122)android.app.ActivityThread.access $ 600で:43:54.858:E/AndroidRuntime (9190):android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1146)
03-05 23:43:54.858:E/AndroidRuntime(9190):android.os.Handler.dispatchMessage Handler.java:99)
03-05 23:43:54.858:E/AndroidRuntime(9190):android.os.Looper.loop(Looper.java:137)で
03-05 23。 43:54.858:E/AndroidRuntime(9190):android.app.Acti vityThread.main(ActivityThread.java:4340)
03-05 23:43:54.858:E/AndroidRuntime(9190):java.lang.reflect.Method.invokeNative(ネイティブメソッド)で
03- 05/23:43:54.858:E/AndroidRuntime(9190):java.lang.reflect.Method.invoke(Method.java:511)
03-05 23:43:54.858:E/AndroidRuntime(9190) :com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
03-05 23:43:54.858:E/AndroidRuntime(9190):com.android.internal.os .ZygoteInit.main(ZygoteInit.java:551)
03-05 23:43:54.858:E/AndroidRuntime(9190):43:54.858:E/AndroidRuntime(9190)dalvik.system.NativeStart.main(ネイティブメソッド)
03-05 23で原因:android.os.NetworkOnMainThreadException
03-05 23:43:54。858:E/AndroidRuntime(9190):android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
03-05 23:43:54.858:E/AndroidRuntime(9190):at java.net .InetAddress.lookupHostByName(InetAddress.java:391)
03-05 23:43:54.858:E/AndroidRuntime(9190):java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)で
(9190):java.net.InetAddress.getAllByName(InetAddress.java:220)
03-05 23:43:54.858:E/AndroidRuntime(9190)03-05 23:43:54.858:E/AndroidRuntime :org.apache.http.impl.conn.DefaultClienでtConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
03-05 23:43:54.858:E/AndroidRuntime(9190):org.apache.http.impl.conn.AbstractPoolEntry.openで(AbstractPoolEntry.java:164 )
03-05 23:43:54.858:E/AndroidRuntime(9190):org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
03-05 23で:43:54.858:E/AndroidRuntime(9190):org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
03-05 23:43:54.858:E/AndroidRun時間(9190):org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
03-05 23:43:54.858:E/AndroidRuntime(9190):org.apache .http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
03-05 23:43:54.858:E/AndroidRuntime(9190):org.apache.http.impl.client.AbstractHttpClientました。実行(AbstractHttpClient.java:465)
03-05 23:43:54.858:E/AndroidRuntime(9190):com.example.club.ClubActivity $ XMLfunctions.getXML(ClubActivity.java:205)で
03-05 23:43:54.858:E/AndroidRu ntime(9190):com.example.club.MainTable.onCreate(Table.java:30)
03-05 23:43:54.858:E/AndroidRuntime(9190):android.app.Activity.performCreate (Activity.java:4465)
03-05 23:43:54.858:E/AndroidRuntime(9190):android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)で
03-05 23 :43:54.858:E/AndroidRuntime(9190):任意およびすべてのヘルプのためのandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)で
ありがとう!
私はそれをどうやって行うのか全く分かりません。私のアプリでその作業をする方法を理解するのに役立つ良いチュートリアルですか?ありがとう! –
これに関する一連の記事があります。 1. http://www.vogella.de/articles/AndroidPerformance/article.html、2. http://android-developers.blogspot.in/2010/07/multithreading-for-performance.html、3. http: //androidcookbook.com/Recipe.seam?recipeId=2260&title=Using%20AsyncTask%20to%20do%20background%20processing n more more。乾杯..!!! – AndroDev