2016-09-08 3 views
-2

Ich habe schwere Zeiten beim Speichern einer Datei im internen Speicher. Unten ist mein Code zum Speichern in externen Speicher, aber ich kenne nicht die richtige Methode zum Speichern meiner Datei im internen Speicher. Ich bin neu in der Codierung. Kann mir jemand helfen mit this.`Speichern Sie eine Datei im internen Speicher

public class Semester extends AppCompatActivity { 
 

 
    Button btnSem; 
 
    ListView lvFiles; 
 
    private ArrayAdapter arrayAdapter; 
 
    private ArrayList <String> files_on_server = new ArrayList < >(); 
 
    private Handler handler; 
 
    private String selected_file; 
 
    private ProgressDialog progressDialog; 
 

 
    @ 
 
    Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
    super.onCreate(savedInstanceState); 
 
    setContentView(R.layout.activity_semester); 
 
    btnSem = (Button) findViewById(R.id.btnSem); 
 
    lvFiles = (ListView) findViewById(R.id.lvFiles); 
 

 
    initialize(); 
 

 
    } 
 

 
    private void initialize() { 
 

 
    arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, files_on_server); 
 
    lvFiles.setAdapter(arrayAdapter); 
 
    handler = new Handler(); 
 
    progressDialog = new ProgressDialog(this); 
 
    progressDialog.setTitle("Downloading..."); 
 
    progressDialog.setMax(100); 
 
    progressDialog.setCancelable(false); 
 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
 

 

 
    btnSem.setOnClickListener(new View.OnClickListener() {@ 
 
     Override 
 
     public void onClick(View view) { 
 
     Thread t = new Thread(new Runnable() {@ 
 
      Override 
 
      public void run() { 
 
      OkHttpClient client = new OkHttpClient(); 
 
      Request request = new Request.Builder().url("http:/192.168.0.102/client/index.php?list_files").build(); 
 
      Response response = null; 
 
      try { 
 
       response = client.newCall(request).execute(); 
 
       JSONArray array = new JSONArray(response.body().string()); 
 

 
       for (int i = 0; i < array.length(); i++) { 
 
       String file_name = array.getString(i); 
 
       if (files_on_server.indexOf(file_name) == -1) 
 
        files_on_server.add(file_name); 
 
       } 
 
       handler.post(new Runnable() {@ 
 
       Override 
 
       public void run() { 
 
        arrayAdapter.notifyDataSetChanged(); 
 
       } 
 
       }); 
 

 

 
      } catch (IOException e) { 
 
       e.printStackTrace(); 
 
      } catch (JSONException e) { 
 
       e.printStackTrace(); 
 
      } 
 
      } 
 
     }); 
 
     t.start(); 
 
     } 
 

 
    }); 
 
    lvFiles.setOnItemClickListener(new AdapterView.OnItemClickListener() {@ 
 
     Override 
 
     public void onItemClick(AdapterView <? > adapterView, View view, int i, long l) { 
 
     selected_file = ((TextView) view).getText().toString(); 
 

 
     Thread t = new Thread(new Runnable() {@ 
 
      Override 
 
      public void run() { 
 
      OkHttpClient client = new OkHttpClient(); 
 
      Request request = new Request.Builder().url("192.168.0.102/client/" + selected_file).build(); 
 

 
      Response response = null; 
 
      try { 
 
       response = client.newCall(request).execute(); 
 
       float file_size = response.body().contentLength(); 
 

 
       BufferedInputStream inputStream = new BufferedInputStream(response.body().byteStream()); 
 
       OutputStream stream = new FileOutputStream(Environment.getRootDirectory() + "/files" + selected_file); 
 
       byte[] data = new byte[8192]; 
 
       float total = 0; 
 
       int read_bytes = 0; 
 

 
       handler.post(new Runnable() {@ 
 
       Override 
 
       public void run() { 
 
        progressDialog.show(); 
 
       } 
 
       }); 
 

 
       while ((read_bytes = inputStream.read(data)) != -1) { 
 
       total = total + read_bytes; 
 
       stream.write(data, 0, read_bytes); 
 
       progressDialog.setProgress((int)(total/file_size) * 100); 
 

 
       } 
 
       progressDialog.dismiss(); 
 
       stream.flush(); 
 
       stream.close(); 
 
       response.body().close(); 
 

 

 
      } catch (IOException e) { 
 
       e.printStackTrace(); 
 
      } 
 
      } 
 
     }); 
 
     } 
 
    }); 
 

 
    } 
 

 

 

 
}

`

Antwort

0
OutputStream stream = new FileOutputStream(Environment.getRootDirectory() + "/files" + selected_file); 

In über die Linie, sollten Sie getFilesDir() instad von Environment.getRootDirectory() speichern in Ihrer Anwendung internes Verzeichnis verwenden.

ODER

Sie können auch direkt FileOutputStream mit erstellen openFileOutput(name, mode) mit MODE_PRIVATE

Verwandte Themen