2013-08-25 5 views
1

Привет Я создал разбор JSON с http-сервера на основе this tutorial. Но я хочу разобрать этот JSON-файл с SD-карты. Я могу распечатать местоположение файла json, используя Environment.getExternalStorageDirectory(). GetAbsolutePath(), но я не знаю, как изменить AsyncTask, прочитав этот файл. может кто-нибудь помочь мне сделать это? (Я новичок в андроид развития) кода выглядит следующим образом:Разбор JSON от sdcard - GSON

public class ClientActivity extends Activity { 

    TextView capitalTextView; 
    ProgressDialog progressDialog; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.main1); 
     capitalTextView = (TextView) findViewById(R.id.capital_textview); 

     this.retrieveCapitals(); 
    } 

    void retrieveCapitals() { 

     progressDialog = ProgressDialog.show(this, 
       "Please wait...", "Retrieving data...", true, true); 

     CapitalsRetrieverAsyncTask task = new CapitalsRetrieverAsyncTask(); 
     task.execute(); 
     progressDialog.setOnCancelListener(new CancelListener(task));  
    } 

    private class CapitalsRetrieverAsyncTask extends AsyncTask<Void, Void, Void> { 

     Response response; 

     @Override 
     protected Void doInBackground(Void... params) { 
      String url = "http://sample.com/sample_data.json"; 
      HttpGet getRequest = new HttpGet(url); 

      File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/example.json"); 
      System.out.println(file); 

      try { 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpResponse getResponse = httpClient.execute(getRequest); 
       final int statusCode = getResponse.getStatusLine().getStatusCode(); 

       if (statusCode != HttpStatus.SC_OK) { 
        Log.w(getClass().getSimpleName(), "Error " + statusCode + " for URL " + url); 
        return null; 
       } 

       HttpEntity getResponseEntity = getResponse.getEntity(); 
       InputStream httpResponseStream = getResponseEntity.getContent(); 
       Reader inputStreamReader = new InputStreamReader(httpResponseStream); 

       Gson gson = new Gson(); 
       this.response = gson.fromJson(inputStreamReader, Response.class); 
       System.out.println(this.response); 
      } 
      catch (IOException e) { 
       getRequest.abort(); 
       Log.w(getClass().getSimpleName(), "Error for URL " + url, e); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      StringBuilder builder = new StringBuilder(); 
      for (Shop shop : this.response.shops) { 

       builder.append(String.format("<br>ID: <b>%s</b><br>Shop: <b>%s</b><br>Description: <b>%s</b><br><br>", shop.getId(), shop.getName(), shop.getDescription())); 

      } 

      capitalTextView.setText(Html.fromHtml(builder.toString())); 
      progressDialog.cancel(); 
     } 

    } 

    private class CancelListener implements OnCancelListener { 

     AsyncTask<?, ?, ?> cancellableTask; 

     public CancelListener(AsyncTask<?, ?, ?> task) { 
      cancellableTask = task; 
     } 

     @Override 
     public void onCancel(DialogInterface dialog) { 
      cancellableTask.cancel(true); 
     } 

    } 

} 

ответ

0

Не сохранить файл в формате JSON, как это. JSON предназначен для передачи значений из одного места в другое.

Вместо этого в зависимости от данных вы можете использовать базу данных Shared Preference или SQLite для ее хранения. Отметьте: http://developer.android.com/guide/topics/data/data-storage.html

Затем вы можете легко получить его и внести изменения в данные.

Смежные вопросы