Android開発のお勉強

メニュー

E-Mail



TwitterAPIを利用したつぶやき検索アプリを作る

キーワードからつぶやきを検索して表示するアプリを作ります。

キーワードを入力するEditTextと検索ボタンを配置し、
結果はTextViewで表示する簡単なアプリです。


● TwitterAPIを利用するクラス

 AsyncTaskを継承したクラスを作ります。
doInBackgroundに非同期処理、onPostExecuteで非同期処理が完了した際の処理。
AsyncTaskは、画面を更新することができます。

コンストラクタでTextViewを渡します。
このTextViewは、つぶやきを表示するTextViewです。

doInBackgroundの処理を実装します。
 リクエストを送信して、JSONデータを取得します。
JSONObjectを生成してから、resultsをJSONArrayで取得します。
JSONArrayからJSONObjectを配列分ループして、
つぶやき情報を取り出します。

 onPostExecuteで画面の更新処理を実装します。
TextViewに処理結果をセットします。



import java.io.ByteArrayOutputStream;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ListView;
import android.widget.TextView;

public class MyHttpClient extends AsyncTask<String,String,String> {
    private ListView listView;
    private TextView text;


    public MyHttpClient(TextView text) {
        super();
        this.text = text;
    }

    @Override
    protected String doInBackground(String... arg0) {
        String uri = "http://search.twitter.com/search.json?q=" + arg0[0];

        DefaultHttpClient client = new DefaultHttpClient();
        HttpUriRequest req = new HttpGet(uri);
        HttpResponse res = null;

        String ret = "";

        try {
            res = client.execute(req);

            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            res.getEntity().writeTo(outputStream);
            String data = outputStream.toString();

            JSONObject rootObject = new JSONObject(data);
            JSONArray resArray = rootObject.getJSONArray("results");

            for (int i = 0; i < resArray.length(); i++) {
                JSONObject jsonObj = resArray.getJSONObject(i);
                ret += jsonObj.getString("from_user")+ "\r\n";
                ret += jsonObj.getString("text") + "\r\n\r\n";
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return ret;
    }

    protected void onPostExecute(String ret) {
        this.text.setText(ret);
    }
}




● レイアウト



<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" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:ems="10" >
        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="Button" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button1" />

</RelativeLayout>




● Activity
ボタンが押された処理を実装します。
リクエストを送信するクラスを生成し、
パラメータ(検索キーワード)を渡して、処理を実行します。




import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class TwitterActivity extends Activity {

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

        Button btn = (Button)findViewById(R.id.button1);

        btn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                EditText editText = (EditText)findViewById(R.id.editText1);
                TextView text = (TextView)findViewById(R.id.textView1);
                MyHttpClient client = new MyHttpClient(text);
                client.execute(editText.getText().toString());
                }
            });
    }

    @Override public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.activity_twitter, menu);
        return true;
    }
}






Copyright (C) Androidアプリ開発のお勉強. All Rights Reserved.