我有一个看起来像这样的在线 JSON 文件:
{
"iPadVersion": "1.0",
"AndroidVersion": "1.0"
}
我正在尝试这样阅读,(这部分代码在 AsyncTask 中):
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl("http://mylink/db.json");
String str = "tmp";
try {
str = json.getString("AndroidVersion");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d(TAG, ""+str);
我在 log.d 总是得到“tmp”,它不起作用。
实体追踪:
05-16 12:54:08.605: W/System.err(20406): java.io.FileNotFoundException: /http:/mylink/db.json: open failed: ENOENT (No such file or directory)
05-16 12:54:08.605: W/System.err(20406): at libcore.io.IoBridge.open(IoBridge.java:406)
05-16 12:54:08.605: W/System.err(20406): at java.io.FileInputStream.<init>(FileInputStream.java:78)
05-16 12:54:08.605: W/System.err(20406): at java.io.FileInputStream.<init>(FileInputStream.java:105)
05-16 12:54:08.605: W/System.err(20406): at java.io.FileReader.<init>(FileReader.java:66)
05-16 12:54:08.605: W/System.err(20406): at com.weterworks.JSONParser.getJSONFromUrl(JSONParser.java:37)
05-16 12:54:08.605: W/System.err(20406): at com.weterworks.MainActivity$sync.<init>(MainActivity.java:359)
05-16 12:54:08.605: W/System.err(20406): at com.weterworks.MainActivity.onCreate(MainActivity.java:263)
05-16 12:54:08.605: W/System.err(20406): at android.app.Activity.performCreate(Activity.java:4465)
05-16 12:54:08.605: W/System.err(20406): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-16 12:54:08.605: W/System.err(20406): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-16 12:54:08.605: W/System.err(20406): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-16 12:54:08.605: W/System.err(20406): at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-16 12:54:08.605: W/System.err(20406): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-16 12:54:08.605: W/System.err(20406): at android.os.Handler.dispatchMessage(Handler.java:99)
05-16 12:54:08.605: W/System.err(20406): at android.os.Looper.loop(Looper.java:137)
05-16 12:54:08.605: W/System.err(20406): at android.app.ActivityThread.main(ActivityThread.java:4424)
05-16 12:54:08.605: W/System.err(20406): at java.lang.reflect.Method.invokeNative(Native Method)
05-16 12:54:08.615: W/System.err(20406): at java.lang.reflect.Method.invoke(Method.java:511)
05-16 12:54:08.615: W/System.err(20406): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-16 12:54:08.615: W/System.err(20406): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-16 12:54:08.615: W/System.err(20406): at dalvik.system.NativeStart.main(Native Method)
05-16 12:54:08.615: W/System.err(20406): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
05-16 12:54:08.615: W/System.err(20406): at libcore.io.Posix.open(Native Method)
05-16 12:54:08.615: W/System.err(20406): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
05-16 12:54:08.615: W/System.err(20406): at libcore.io.IoBridge.open(IoBridge.java:390)
05-16 12:54:08.615: W/System.err(20406): ... 20 more
05-16 12:54:08.615: W/System.err(20406): org.json.JSONException: No value for AndroidVersion
05-16 12:54:08.615: W/System.err(20406): at org.json.JSONObject.get(JSONObject.java:354)
05-16 12:54:08.615: W/System.err(20406): at org.json.JSONObject.getString(JSONObject.java:510)
05-16 12:54:08.615: W/System.err(20406): at com.weterworks.MainActivity$sync.doInBackground(MainActivity.java:404)
05-16 12:54:08.615: W/System.err(20406): at com.weterworks.MainActivity$sync.doInBackground(MainActivity.java:1)
05-16 12:54:08.615: W/System.err(20406): at android.os.AsyncTask$2.call(AsyncTask.java:264)
05-16 12:54:08.615: W/System.err(20406): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-16 12:54:08.625: W/System.err(20406): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-16 12:54:08.625: W/System.err(20406): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
05-16 12:54:08.625: W/System.err(20406): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-16 12:54:08.625: W/System.err(20406): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-16 12:54:08.625: W/System.err(20406): at java.lang.Thread.run(Thread.java:856)
JsonParser 类:
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url) {
try {
BufferedReader reader = new BufferedReader(new FileReader(url));
String line, results = "";
while ((line = reader.readLine()) != null) {
results += line;
}
reader.close();
jObj = new JSONObject(results);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jObj;
}
}