转换从URL中获取JSON对象从URL中拉出
问题描述:
我想从一个字符串中获取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阵列。
答
为什么你不使用你的字符串,这样创建一个JSON对象:
JSONObject jsonObject = new JSONObject(result);
现在,获得所需的值是这样的:
String name = jsonObject.getString("name");
答
由于JVM在运行时找不到org.json.simple.parser.JSONParser
,因此得到java.lang.NoClassDefFoundError
。检查该库是否包含在正确的目录中并添加到你的类路径中。
+0
我已经包含了这个导入,它仍然是一样的,你认为在代码中有什么我做错了吗? – 2012-07-10 10:49:42
您的主要错误是:'java的。 lang.NoClassDefFoundError' - 即它没有找到你的JSON库。您是否下载了另一个JSON实现,但没有将.jar放入项目中名为'libs'的文件夹中? – Jens 2012-07-10 10:35:58
我检查了这一点,一切都正确,因为我可以看到,我现在只是很困惑。 JSON让我疯狂 – 2012-07-10 12:25:22
首先删除你正在使用的第三方库。 Android有一个(基本的)JSON解析器(在org.json包中)。其次,你的HTTP代码很重要 - 你需要将HTTP下载转移到一个'AsyncTask'中 - 你的方法将响应转换为一个字符串最好是功能失常 - 你应该首先使用'org.apache .http.util.EntityUtils#toString(HttpEntity)'方法(也包含在SDK中) – Jens 2012-07-10 14:43:16