Попытка отобразить твиты, проблемы с JSON и Java - PullRequest
0 голосов
/ 23 марта 2012

Я просто пытаюсь получить все твиты из определенного хэштега и отобразить их в виде списка на Android.У меня есть некоторый код, который не выдает никаких ошибок, но когда я запускаю приложение, Android просто неожиданно закрывается, я думаю, что это может быть, где большинство проблем лежат:

public ArrayList<Tweet> getTweets(String searchTerm, int page) throws JSONException {
    String searchUrl = "http://search.twitter.com/search.json?q=@" 
                        + searchTerm + "&rpp=100&page=" + page;

    ArrayList<Tweet> tweets = new ArrayList<Tweet>();

    HttpClient client = new  DefaultHttpClient();
    HttpGet get = new HttpGet(searchUrl);

    ResponseHandler<String> responseHandler = new BasicResponseHandler();

    String responseBody = null;
    try{
        responseBody = client.execute(get, responseHandler);
    }catch(Exception ex) {
        ex.printStackTrace();
    }

    JSONObject jsonObject = null;
    JSONParser parser=new JSONParser();

    try {
        Object obj = parser.parse(responseBody);
        jsonObject=(JSONObject)obj;

    }catch(Exception ex){
        Log.v("TEST","Exception: " + ex.getMessage());
    }

    JSONArray arr = null;

    try {
        Object j = jsonObject.get("results");
        arr = (JSONArray)j;
    }catch(Exception ex){
        Log.v("TEST","Exception: " + ex.getMessage());
    }

    for(int i = 0; i < arr.length(); i++) {
           JSONObject t = (JSONObject) arr.get(i);
           Tweet tweet = new Tweet(
             t.get("from_user").toString(),
             t.get("text").toString(),
             t.get("profile_image_url").toString()
           );
           tweets.add(tweet);
         }

    return tweets;
}

Или когда код инициализирует

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.info_main_layout);

    ArrayList<Tweet> tweets = null;
    try {
        tweets = getTweets("android", 1);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    ListView listView = (ListView) findViewById(R.id.ListViewId);
    listView.setAdapter(new UserItemAdapter(this, R.layout.info_layout, tweets));
}

public class UserItemAdapter extends ArrayAdapter<Tweet> {
    private ArrayList<Tweet> tweets;

    public UserItemAdapter(Context context, int textViewResourceId, ArrayList<Tweet> tweets) {
        super(context, textViewResourceId, tweets);
        this.tweets = tweets;
    }

В DDMS я получаю следующие ошибки компиляции:

03-23 ​​16: 14: 02.253: E / AndroidRuntime (215): обработчик Uncaught: выход основного потока из-за невыполненного исключения

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.uwe.bus / com.uwe.bus.InfoActivity}: java.lang.NullPointerException

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2496)

03-23 ​​16:14: 02.263: E / AndroidRuntime (215): на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2512)

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): на android.app.ActivityThread.access $ 2200 (ActivityThread.java:119)

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1863)

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215):в android.os.Handler.dispatchMessage (Handler.java:99) 03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): в android.os.Looper.loop (Looper.java:123)

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): на android.app.ActivityThread.main (ActivityThread.java:4363)

03-23 ​​16: 14: 02.263: E /AndroidRuntime (215): на java.lang.reflect.Method.invokeNative (собственный метод)

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): на java.lang.reflect.Method.invoke (Method.java:521)

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:860))

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): вызвано: java.lang.NullPointerException 03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): на ком.uwe.bus.InfoActivity.getTweets (InfoActivity.java:133)

03-23 ​​16:14:02.263: E / AndroidRuntime (215): на com.uwe.bus.InfoActivity.onCreate (InfoActivity.java:39)

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): наandroid.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047)

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2459)

03-23 ​​16: 14: 02.263: E / AndroidRuntime (215): ... еще 11

Строка 39:

ArrayList<tweet> tweets = null;
try {
tweets = getTweets("android", 1);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Строка 133:

for(int i = 0; i < arr.length(); i++) {
JSONObject t = (JSONObject) arr.get(i);
Tweet tweet = new Tweet(
t.get("from_user").toString(),
t.get("text").toString(),
t.get("profile_image_url").toString()
);
tweets.add(tweet);
}

Первая ошибка выглядит так, как будто она возникла из Manifest.xml, но манифест безупречен, поэтому я его не получаю.

Или кто-нибудь знает более простой способ отображениятвиты в андроид ...

1 Ответ

0 голосов
/ 23 марта 2012

Если для цикла for используется строка 133.

Ваша переменная arr не была создана и равна нулю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...