I am trying to get feed from Twitter in my Android app. I used some sample code in order to do that, and now I can't get the app started. Here is the code:
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.json.simple.parser.JSONParser;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class Twitter extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.twitter_layout);
ArrayList<Tweet> tweets = getTweets("android", 1);
ListView listView = (ListView) findViewById(R.id.ListViewId);
listView.setAdapter(new UserItemAdapter(this, R.layout.listitem, 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;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listitem, null);
}
Tweet tweet = tweets.get(position);
if (tweet != null) {
TextView username = (TextView) v.findViewById(R.id.username);
TextView message = (TextView) v.findViewById(R.id.message);
ImageView image = (ImageView) v.findViewById(R.id.avatar);
if (username != null) {
username.setText(tweet.username);
}
if(message != null) {
message.setText(tweet.message);
}
if(image != null) {
image.setImageBitmap(getBitmap(tweet.image_url));
}
}
return v;
}
}
public Bitmap getBitmap(String bitmapUrl) {
try {
URL url = new URL(bitmapUrl);
return BitmapFactory.decodeStream(url.openConnection() .getInputStream());
}
catch(Exception ex) {return null;}
}
public ArrayList<Tweet> getTweets(String searchTerm, int page) {
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 pars=new JSONParser();
/* */
try {
Object obj = pars.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(Object t : arr) {
Tweet tweet = new Tweet(
((JSONObject)t).get("from_user").toString(),
((JSONObject)t).get("text").toString(),
((JSONObject)t).get("profile_image_url").toString()
);
tweets.add(tweet);
}
return tweets;
}
public class Tweet {
public String username;
public String message;
public String image_url;
public Tweet(String username, String message, String url) {
this.username = username;
this.message = message;
this.image_url = url;
}
}
}
And here is my LogCat:
05-23 11:34:16.443: E/AndroidRuntime(25616): FATAL EXCEPTION: main
05-23 11:34:16.443: E/AndroidRuntime(25616): java.lang.NoClassDefFoundError: org.json.simple.parser.JSONParser
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:673)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.widget.TabHost.setCurrentTab(TabHost.java:345)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:138)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.view.View.performClick(View.java:2408)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.view.View$PerformClick.run(View.java:8816)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.os.Handler.handleCallback(Handler.java:587)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.os.Handler.dispatchMessage(Handler.java:92)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.os.Looper.loop(Looper.java:123)
05-23 11:34:16.443: E/AndroidRuntime(25616): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-23 11:34:16.443: E/AndroidRuntime(25616): at java.lang.reflect.Method.invokeNative(Native Method)
05-23 11:34:16.443: E/AndroidRuntime(25616): at java.lang.reflect.Method.invoke(Method.java:521)
05-23 11:34:16.443: E/AndroidRuntime(25616): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
05-23 11:34:16.443: E/AndroidRuntime(25616): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
05-23 11:34:16.443: E/AndroidRuntime(25616): at dalvik.system.NativeStart.main(Native Method)
I am using http://code.google.com/p/json-simple/ .
You need to have the json-simple jar in the Lib
or Libs
directory of your project. You probably currently have it set up so the jar is available for building, but isn't included in the built app.
you should import,
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
and use like
JSONArray aryJSONStrings = new JSONArray("your json string");
for (int i=0; i<aryJSONStrings.length(); i++) {
NewsItemId = aryJSONStrings.getJSONObject(i).getString("your_attribute_name");
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.