0

我目前实现了从服务器(url)解析 json。但我找不到从 sdcard (/Download/example.json) 解析 json 的方法。有人可以帮我解决这个问题/更改此代码吗?

我为此使用了 asyncTask。示例教程或示例代码更受欢迎。(对不起我的英语不好。)

public class Main extends Activity {

        private TextView shopsDisplay;
        private static String searchURL = "http://example.com/sample.json";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.baby);
            //reference throughout class
            shopsDisplay = (TextView)findViewById(R.id.tweet_txt);
            new GetShops().execute(searchURL);
        }
private class GetShops extends AsyncTask<String, Void, String> {
            /*
             * Carry out fetching task in background
             * - receives search URL via execute method
             */
            @Override
            protected String doInBackground(String... shopsURL) {
                //start building result which will be json string
                StringBuilder shopsFeedBuilder = new StringBuilder();
                //should only be one URL, receives array
                for (String searchURL : shopsURL) {
                    HttpClient shopsClient = new DefaultHttpClient();
                    try {
                        //pass search URL string to fetch
                        HttpGet shopsGet = new HttpGet(searchURL);
                        //execute request
                        HttpResponse shopsResponse = shopsClient.execute(shopsGet);
                        //check status, only proceed if ok
                        StatusLine searchStatus = shopsResponse.getStatusLine();
                        if (searchStatus.getStatusCode() == 200) {
                            //get the response
                            HttpEntity shopsEntity = shopsResponse.getEntity();
                            InputStream shopsContent = shopsEntity.getContent();
                            //process the results
                            InputStreamReader shopsInput = new InputStreamReader(shopsContent);
                            BufferedReader shopsReader = new BufferedReader(shopsInput);
                            String lineIn;
                            while ((lineIn = shopsReader.readLine()) != null) {
                                shopsFeedBuilder.append(lineIn);
                            }
                        }
                        else
                            shopsDisplay.setText("Whoops - something went wrong!");
                    }
                    catch(Exception e){ 
                        shopsDisplay.setText("Whoops - something went wrong!");
                        e.printStackTrace(); 
                    }
                }
                //return result string
                return shopsFeedBuilder.toString();
            }
            /*
             * Process result of search query
             * - this receives JSON string representing shops with search term included
             */
            protected void onPostExecute(String result) {
                //start preparing result string for display
                StringBuilder shopsResultBuilder = new StringBuilder();
                try {
                    //get JSONObject from result
                    JSONObject resultObject = new JSONObject(result);
                    //get JSONArray contained within the JSONObject retrieved - "results"
                    JSONArray shopsArray = resultObject.getJSONArray("shops");
                    //loop through each item in the shops array
                    for (int t=0; t<shopsArray.length(); t++) {
                        //each item is a JSONObject
                        JSONObject shopsObject = shopsArray.getJSONObject(t);
                        //for if condition
                        String id = (String) shopsObject.get("id");
                        //get the name and description for each shops
                        if (id.equals("550")){
                        shopsResultBuilder.append(shopsObject.getString("name")+": ");
                        shopsResultBuilder.append(shopsObject.get("description")+"\n\n");
                        }
                    }
                }
                catch (Exception e) {
                    shopsDisplay.setText("Whoops - something went wrong!");
                    e.printStackTrace();
                }
                //check result exists
                if(shopsResultBuilder.length()>0)
                    shopsDisplay.setText(shopsResultBuilder.toString());
                else
                    shopsDisplay.setText("Sorry - no shops found for your search!");
            }
        }


}
4

1 回答 1

1

对于JSONObject,使用标准 Java 文件 I/O 将文件读入 a String,然后将其传递给JSONObject构造函数。

但是,如果您有一个较大的 JSON 文件,您可能希望切换到其他一些 JSON 解析器(例如JsonReader),这可能会为您提供不同的选项(例如,使用FileReaderwith JsonReader)。

于 2013-08-12T22:02:37.007 回答