0

我正在尝试使用字符串数组中的值填充我的 ListView。字符串数组中有值,我已经检查过以确保。我使用的代码,从我以前的搜索中看到的,是正确的。我正在通过 Android 模拟器运行该应用程序,并尝试创建一个新的模拟器、清理项目并重新启动 Eclipse。但是当应用程序启动时,列表中仍然没有数据。

我正在使用运行 Android 4.2 的 Galaxy Nexus 模拟器。

MainActivity.java:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ListView redditView = (ListView) findViewById(R.id.redditView);
    String[] redditList = readRedditFeed();

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_list_item_1, redditList);

    redditView.setAdapter(adapter);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public String[] readRedditFeed()
{

    return output;
}
}

活动主.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<ListView
    android:id="@+id/redditView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" >

</ListView>

</RelativeLayout>
4

2 回答 2

0

您正在主线程中解析数据,它可能会导致 ANR。

使用线程和处理程序或 AsyncTask。

从线程获取解析结果后,使用处理程序在列表中设置适配器或使用AsyncTask doInbackground() 方法接收和解析数据并在列表中设置 onPostExecute() 适配器。

于 2013-01-26T18:47:34.340 回答
0

只需使用 asyncTask 来完成后台工作而不会阻塞 UI。

private LoadingStuffTask task;
private String [] redditList;
private ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ListView redditView = (ListView) findViewById(R.id.redditView);
     task = new LoadingStuffTask();
    task.execute("Process started!");

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

    private class LoadingStuffTask extends
            AsyncTask<String, String, String> {

        @Override
        protected String doInBackground(String... params) {
            redditList=readRedditFeed()
        }

        @Override
        protected void onProgressUpdate(
                String... values) {
        }

        @Override
        protected void onPostExecute(String result) {
            pdia.dismiss();
            adapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_list_item_1, redditList);
            redditView.setAdapter(adapter);

        }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pdia = new ProgressDialog(classificaA.this);
            pdia.setMessage("Doing background..");
            pdia.show();
        }

    }


public String[] readRedditFeed()
{
    ArrayList<String> redditList = new ArrayList<String>();

    try
    {   
        URL url = new URL("http://www.reddit.com/.json");
        InputStream in = url.openStream();
        DataInputStream din = new DataInputStream(new BufferedInputStream(in));

        String line = "";
        String lines = "";
        while((line = din.readLine()) != null)
            lines += line;

        JSONObject json = (JSONObject) new JSONTokener(lines).nextValue();
        json = (JSONObject) json.getJSONObject("data");
        JSONArray jsonArr = (JSONArray) json.getJSONArray("children");

        for(int i = 0; i < 5; i++)
        {

            json = jsonArr.getJSONObject(i);
            json = (JSONObject) json.getJSONObject("data");
            redditList.add(json.get("title").toString().replaceAll("\"", ""));
        }

    }
    catch (Exception e)
    {}

    String[] output = new String[redditList.size()];
    redditList.toArray(output);
    return output;
}
}
于 2013-01-27T16:38:48.583 回答