我是 Java 的新手,现在我想解析来自 API 请求的数据。我已经测试了 JSONParse 中的所有类,但没有成功。
我使用由 Mini Sharma
我还从它返回的 URL 准备了一个 JSON:
{
"code": "100",
"message": "success",
"data": [
{
"FullName": "Marcelius Dagpin",
"Email": "mardagz@gmail.com",
"Android_ID": "e88244s1606091f6"
}
],
"time": "0.88044500350952 ms"
}
我的方法:
class PostRegistration extends AsyncTask<String, Void, Boolean> {
private ProgressDialog pgDialog;
//On Execute Progress
@Override
protected void onPreExecute() {
super.onPreExecute();
pgDialog.setMessage("Please wait while processing your registration");
pgDialog.setTitle("Processing");
pgDialog.show();
pgDialog.setCancelable(false);
}
@Override
protected void onPostExecute(final Boolean status) {
if(pgDialog.isShowing()) {
pgDialog.dismiss();
}
}
//Running on background
@Override
protected Boolean doInBackground(String... args) {
JSONParser jsonParser = new JSONParser();
try {
JSONArray json = jsonParser.getJSONFromURL(args[0]); //http://localhost/dev/?request=post&type=user&value=VALUEHERE
JSONObject jsono = json.getJSONObject(0);
Log.d("Tag", jsono.toString());
}catch(Exception e) {
e.printStackTrace();
}
return null;
}
}
我在运行这段代码时遇到错误。
这是日志:
02-27 02:00:00.077 2180-2180/com.sprikiwiki_lab.dev.practice1 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.sprikiwiki_lab.dev.practice1, PID: 2180
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sprikiwiki_lab.dev.practice1/com.sprikiwiki_lab.dev.practice1.RegistrationActivity}: java.lang.NullPointerException: println needs a message
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.println_filter(Log.java:105)
at android.util.Log.d(Log.java:166)
at com.sprikiwiki_lab.dev.practice1.RegistrationActivity.onCreate(RegistrationActivity.java:79)
at android.app.Activity.performCreate(Activity.java:5411)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
02-27 02:00:01.367 2180-2180/com.sprikiwiki_lab.dev.practice1 I/Process﹕ Sending signal. PID: 2180 SIG: 9
老实说。
任何人都可以帮助我或提出建议。
谢谢
最佳答案
我分析了您的代码,发现了一些问题。我将逐步描述它:
首先在 android 中,当您想要连接互联网时,您必须在您的 list 中注册权限。
<uses-permission android:name="android.permission.INTERNET"/>
第二点是如何设置DATA_URL
这里你初始化一个变量
private static String DATA_URL = null;
在这里你要设置它
try {
//...
String DATA_URL = "http://dev.sprikiwiki-lab.com/?request=get&uid=1";
}catch (Exception e) {
//...
}
但是您创建了新变量 - 您必须像下面这样删除 String
:
try {
//...
DATA_URL = "http://dev.sprikiwiki-lab.com/?request=get&uid=1";
}catch (Exception e) {
//...
}
此外,您还可以删除静态 :)
下一个问题是在 getJSONFromUrl 方法内部。您将 url 作为参数传递,但您什么都不做。改线打击:
HttpGet httpGet = new HttpGet();
用这个:
HttpGet httpGet = new HttpGet(url);
最后一期是关于你的方法的结尾。您创建 new JSONArray(builder);
。您应该在此处创建 newJSONObject(builder),如下所示:
//Parse string to JSON object
try {
jarray = new JSONObject(builder.toString());
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
//Return json to array
return jarray;
此外,您必须将 jarray
的类型更改为 JSONObject
并返回 getJSONFromURL
方法的类型
关于java - 在 Android Studio 中将 JSON 解析为 List [java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28749717/