0

Twitter ユーザー フィードを解析する必要があり、json 文字列から JSON オブジェクトを作成しようとしています。json文字列を正しく取得できましたが、それからJSONオブジェクトを作成しようとすると、JSONException. これは私の試行コードです。

package com.heath_bar.twitter;

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

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    final String URL = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=*******";
    final String APIKEY = "***********************";
    final String APISECRET = "*********************";
    final String BearerToken = "AAAAAAAAAAAAAAAAAAAAAMRF***************************";

    JSONObject jsonObj = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn_get_feed = (Button) findViewById(R.id.btn_get_feed);
        btn_get_feed.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String bearer_token = BearerToken;
                new GetFeedTask().execute(bearer_token, URL);
            }
        });
    }

    protected class GetFeedTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {

            try {
                DefaultHttpClient httpclient = new DefaultHttpClient(
                        new BasicHttpParams());
                HttpGet httpget = new HttpGet(params[1]);
                httpget.setHeader("Authorization", "Bearer " + params[0]);
                httpget.setHeader("Content-type", "application/json");

                InputStream inputStream = null;
                HttpResponse response = httpclient.execute(httpget);
                HttpEntity entity = response.getEntity();
                inputStream = entity.getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        inputStream, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                inputStream.close();
                return sb.toString();
            } catch (Exception e) {
                Log.e("GetFeedTask", "Error:" + e.getMessage());
                return null;
            }
        }

        @Override
        protected void onPostExecute(String jsonText) {
            try {
                TextView txt = (TextView) findViewById(R.id.txt_feed);
                txt.setText(jsonText); // this is showing the JSON string

                try {
                    jsonObj = new JSONObject(jsonText);
                    Log.d("status_success", "Successfully created JSON object");
                } catch (JSONException e) {
                    Log.e("JSON Parser", "Error parsing data " + e.toString());
                }
            } catch (Exception e) {
                Log.e("GetFeedTask", "Error:" + e.getMessage());
            }
        }
    }

}
4

2 に答える 2

1

Twitter のツイートは、JSONObject ごとに「text」タグの下に表示されます。次のようにjson配列から各jsonオブジェクトにアクセスします

ArrayList<String> tweets=new ArrayList<String>();
JSONArray array =new JSONArray(jsonText);
                    for(int i=0;i<array.length();i++){
                        JSONObject obj=array.getJSONObject(i);
                        String text=obj.getString("text");
                        tweets.add(text);
                        ArrayAdapter<String> adapter=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_list_item_1,tweets);
                        lv.setAdapter(adapter);// displaying in a listview
                    }
于 2013-07-20T09:14:15.823 に答える