Загрузка твитов через код канала JSON не работает - PullRequest
1 голос
/ 23 ноября 2011

Я создаю свое первое приложение для Android - что-то, что будет отображать мои твиты в списке.

Мне удалось запустить приложение раньше, но иногда скачивание твитов занимало много времени, иприложение перестает отвечать на запросы или аварийно завершает работу.

Я решил добавить ветку в приложение, чтобы оно не переставало отвечать на запросы, но теперь оно вообще не работает: /

Кто-нибудь знает, что не так?Это всего лишь мой третий день изучения Java, и я не могу понять, в чем здесь проблема.

Вот код:

package com.app.first;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;

public class Twitter extends ListActivity {

public ProgressDialog pd = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    // Show the ProgressDialog on this thread
    pd = ProgressDialog.show(this, "Working..", "Downloading Data...",
            true, false);

    new LoadTwitterFeed().execute();

}

public class LoadTwitterFeed extends AsyncTask<String, Integer, String> {

    String tweets[] = new String[9];

    public String readTwitterFeed() {
        StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(
                "https://api.twitter.com/1/statuses/user_timeline.json?screen_name=jjmpsp&include_rts=false&count=10");
        try {
            HttpResponse response = client.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(content));
                String line;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
            } else {
                Log.e(ParseJSON.class.toString(), "Failed to download file");
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return builder.toString();
    }

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        String readTwitterFeed = readTwitterFeed();

        try {
            JSONArray jsonArray = new JSONArray(readTwitterFeed);

            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                tweets[i] = jsonObject.getString("text").toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        setListAdapter(new ArrayAdapter<String>(Twitter.this,
                android.R.layout.simple_list_item_1, tweets));

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // what to do when the task ends.
        pd.hide();

    }

}

}

1 Ответ

2 голосов
/ 23 ноября 2011

установить этот код в onPostExecute

setListAdapter(new ArrayAdapter<String>(Twitter.this,
            android.R.layout.simple_list_item_1, tweets));
...