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;
}
}

activity_main.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

UI をブロックすることなく、asyncTask を使用してバックグラウンド作業を行うだけです。

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 に答える
0

メインスレッドでデータを解析していると、ANR が発生する可能性があります。

Thread and handler または AsyncTask のいずれかを使用します。

スレッドから解析結果を取得した後、ハンドラーを使用してリストにアダプターを設定するか、 AsyncTask doInbackground() メソッドを使用してデータを受信および解析し、onPostExecute() を使用してリストにアダプターを設定します。

于 2013-01-26T18:47:34.340 に答える