сохранение во внешнюю память android - PullRequest
0 голосов
/ 29 февраля 2012

Привет, ребята, у меня есть это приложение, мне нужно сохранить файл json во внешнюю память, я выполнил проверку внешней, но, кажется, Карнт нашел руководства по дальнейшим действиям, вот мой код ...

    public class MainActivity extends Activity {

String entityString = null;
String storyObj = "";
Object json = null;
HttpEntity entity = null;
InputStream is = null;
Integer responseInteger = null;

//external storage check
boolean storageAvailable = false;
boolean storageWriteable = false;
String state = Environment.getExternalStorageState();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button downloadBtn = (Button) findViewById(R.id.downloadButton);
    downloadBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            saveToExternal();

        }
    });

    Button loadBtn = (Button) findViewById(R.id.loadButton);
    loadBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            loadExternal();

        }
    });


 //end of onCreate()   
}


public void saveToExternal(){
    TextView test = (TextView) findViewById(R.id.textView);


    try{
        //connects to mySQL
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost("http://10.0.2.2/textures_story_list.php");
        HttpResponse response = client.execute(post);
        //captures the response
        entity = response.getEntity();
        InputStream entityStream = entity.getContent();
        StringBuilder entityStringBuilder = new StringBuilder();
        byte [] buffer = new byte[1024];
        int bytesReadCount;
        while ((bytesReadCount = entityStream.read(buffer)) > 0)  {
            entityStringBuilder.append(new String(buffer, 0, bytesReadCount));
        }
        entityString = entityStringBuilder.toString();
        //responseInteger = Integer.valueOf(entityString);
    }catch(Exception e) {
         Log.e("log_tag", "Error in http connection "+e.toString());
    }

    //writes as String from entityString to external memory

    //first check storage state
    try{

        if (Environment.MEDIA_MOUNTED.equals(state)){
            storageAvailable = storageAvailable = true;
        } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
            storageAvailable = true;
            storageWriteable = false;
        } else storageAvailable = storageWriteable = false;









    }catch(Exception e) {
         Log.e("log_tag", "Error saving string "+e.toString());
    }

//end of saveJson()
}

public void loadExternal(){
    TextView test = (TextView) findViewById(R.id.textView);


    //loads the files
    try{
        FileInputStream fileInput = openFileInput("story.json");

        BufferedReader inputReader = new BufferedReader(new InputStreamReader(fileInput, "UTF-8"), 8);
        StringBuilder strBuilder = new StringBuilder();
            String line = null;
            while ((line = inputReader.readLine()) != null) {
                strBuilder.append(line + "\n");
            }
            fileInput.close();
            storyObj = strBuilder.toString();

    }catch(IOException e){
         Log.e("log_tag", "Error building string "+e.toString());
    }

    try{
        JSONArray jArray = new JSONArray(storyObj);
        String storyNames = "";
        for(int i = 0;i<jArray.length();i++){
            storyNames += jArray.getJSONObject(i).getString("story_name") +"\n";
        }
        test.setText(storyNames);

    }catch(JSONException e) {
         Log.e("log_tag", "Error returning string "+e.toString());
    }
    return;
//and of openJson() 
}




//end of class body    
}

после проверки внешнего хранилища мне нужен код для сохранения файла json, чтобы я мог вызвать его позже в моем приложении. Может кто-нибудь помочь мне, пожалуйста?В основном я не знаю, как создать путь к файлу, а затем сохранить его по этому пути к файлу, я также ознакомился с лучшими практиками для этого ... спасибо за ваше время и помогите всем

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Вы можете попробовать:

// Create the file using the SDCard directory
new myFile = File(new File(Environment.getExternalStorageDirectory(), "myfile.json");
// Create an output stream to write the json
FileOutputStream out = new FileOutputStream(myFile)
byte[] b = new byte[4*1024]; // 4k chunks
int read;
while ((read = in.read(b)) > 0) {
   out.write(b, 0, read);
}
out.flush();
out.close();
0 голосов
/ 29 февраля 2012

Примерно так:

if(storageAvailable && storageWriteable) {
    File extFile = new File(Environment.getExternalStorageDirectory(), "story.json");
    FileOutputStream out = new FileOutputStream(extFile);

    out.write(entityString.getBytes());
    out.flush();
    out.close();
}

Кроме того, вы захотите изменить свой метод чтения на что-то вроде этого:

File extFile = new File(Environment.getExternalStorageDirectory(), "story.json");
FileInputStream fileInput = new FileInputStream(extFile);

Удобный метод openFileInput() предназначен для открытия пути к файлу только для каталога внутреннего хранилища files. Вам нужно будет явно ссылаться на внешнее хранилище, чтобы получить там поток файлов.

Вы также можете видеть, что ссылка на файл одинакова в обоих местах, так что, вероятно, это должен быть член, определенный в другом месте класса.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...