2012-05-23 6 views
3

Android 앱에서 Twitter의 피드를 가져 오려고합니다. 이를 위해 몇 가지 샘플 코드를 사용했는데 이제는 앱을 시작할 수 없습니다. 여기JSONParser 오류, 클래스를 찾을 수 없습니다. Android

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/[email protected]" 
           + 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; 
      } 
     } 
    } 

그리고 내 로그 캣입니다 : 내가 http://code.google.com/p/json-simple/을 사용하고

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) 

이 여기에 코드입니다.

+2

처럼 사용이 http://stackoverflow.com/questions/9857539/noclassdeffounderror-when-googleanalyticstracker-getinstance/9857669# 솔루션입니다 9857669 – Akram

+0

https://androidbeasts.wordpress.com/2015/08/04/json-parsing-tutorial/ – Aakash

답변

3

프로젝트의 Lib 또는 Libs 디렉토리에 json-simple jar가 있어야합니다. jar 파일을 사용할 수 있도록 설정했지만 내장 된 응용 프로그램에는 포함되어 있지 않습니다.

+0

빌드 된 앱에 포함하는 방법은 무엇입니까? –

1

가져올해야

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

여기

JSONArray aryJSONStrings = new JSONArray("your json string"); 
for (int i=0; i<aryJSONStrings.length(); i++) { 
     NewsItemId = aryJSONStrings.getJSONObject(i).getString("your_attribute_name"); 
} 
관련 문제