简体   繁体   中英

JSONParser error, class not found. Android

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM