2012-07-10 65 views
0

我想从一个字符串中获取JSON数据,这是从我从URL中拉下来的数据创建的。到目前为止,这是我在我的代码:转换从URL中获取JSON对象从URL中拉出

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final TextView tv = (TextView)findViewById(R.id.result); 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     String username = "username"; 
     String password = "password"; 
     String url = "http://www.example.com/api/core/v1/my/"; 
     String unp = username+":"+password; 


     class MyUser { 
       public String firstName; 
       public String lastName; 
     } 


     try { 
      HttpClient client = new DefaultHttpClient(); 
      HttpGet header = new HttpGet(url); 
      String encoded_login = Base64.encodeToString(unp.getBytes(), Base64.NO_WRAP); 
      header.setHeader(new BasicHeader("Authorization", "Basic "+encoded_login)); 
      HttpResponse response = client.execute(header); 
      HttpEntity entity = response.getEntity(); 

      BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); 
      for (String line; (line = reader.readLine()) != null;line.replaceAll("throw 'allowIllegalResourceCall is false.';", "")) { 
       Vector<Object> vector = new Vector<Object>(); 
       vector.add(line); 
       String result = vector.toString(); 


       JSONObject json = (JSONObject)new JSONParser().parse(result); 
       System.out.println("name=" + json.get("name")); 
       System.out.println("width=" + json.get("width")); 

       System.out.println(line); 
      }  


     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.d(MY_APP_TAG, "Error e: " + e); 
     } 

     } 

这是拉动正确的JSON数据下降,但每一次我尝试分析我得到以下数据:

E/AndroidRuntime(923): FATAL EXCEPTION: main 
E/AndroidRuntime(923): java.lang.NoClassDefFoundError: org.json.simple.parser.JSONParser 
E/AndroidRuntime(923): at basic.authentication.BasicAuthenticationActivity.onCreate(BasicAuthenticationActivity.java:85) 
E/AndroidRuntime(923): at android.app.Activity.performCreate(Activity.java:4465) 
E/AndroidRuntime(923): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
E/AndroidRuntime(923): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
E/AndroidRuntime(923): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
E/AndroidRuntime(923): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
E/AndroidRuntime(923): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
E/AndroidRuntime(923): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(923): at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(923): at android.app.ActivityThread.main(ActivityThread.java:4424) 
E/AndroidRuntime(923): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(923): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(923): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
E/AndroidRuntime(923): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
E/AndroidRuntime(923): at dalvik.system.NativeStart.main(Native Method) 

我对于JSON来说是新的,因此找出这是一个真正的巨大挑战,所以对此的任何帮助都非常感谢。

此外,JSON数据来通过这样的:

{ 
    "enabled" : true, 
    "email" : "[email protected]", 
    "firstName" : "example firstname", 
    "lastName" : "example lastname", 
    "name" : "example fullname", 
    "level" : { 

我知道这些都是JSON对象,而不是JSON阵列。

+0

您的主要错误是:'java的。 lang.NoClassDefFoundError' - 即它没有找到你的JSON库。您是否下载了另一个JSON实现,但没有将.jar放入项目中名为'libs'的文件夹中? – Jens 2012-07-10 10:35:58

+0

我检查了这一点,一切都正确,因为我可以看到,我现在只是很困惑。 JSON让我疯狂 – 2012-07-10 12:25:22

+0

首先删除你正在使用的第三方库。 Android有一个(基本的)JSON解析器(在org.json包中)。其次,你的HTTP代码很重要 - 你需要将HTTP下载转移到一个'AsyncTask'中 - 你的方法将响应转换为一个字符串最好是功能失常 - 你应该首先使用'org.apache .http.util.EntityUtils#toString(HttpEntity)'方法(也包含在SDK中) – Jens 2012-07-10 14:43:16

回答

0

为什么你不使用你的字符串,这样创建一个JSON对象:

 JSONObject jsonObject = new JSONObject(result); 

现在,获得所需的值是这样的:

 String name = jsonObject.getString("name"); 
0

由于JVM在运行时找不到org.json.simple.parser.JSONParser,因此得到java.lang.NoClassDefFoundError。检查该库是否包含在正确的目录中并添加到你的类路径中。

+0

我已经包含了这个导入,它仍然是一样的,你认为在代码中有什么我做错了吗? – 2012-07-10 10:49:42