Внутренняя память для Android; создание файлов
Я пытаюсь просто создать базовые файлы для другого приложения. Поэтому я написал базовое приложение для проработки изломов, а затем собирался добавить его в другое приложение. Вот бревно от кота
10-09 17:56:14.579: D/dalvikvm(11092): Not late-enabling CheckJNI (already on)
10-09 17:56:15.599: E/Trace(11092): error opening trace file: No such file or directory (2)
10-09 17:56:16.549: D/gralloc_goldfish(11092): Emulator without GPU emulation detected.
10-09 17:57:20.158: D/dalvikvm(11092): Debugger has detached; object registry had 1 entries
10-09 17:57:30.078: E/Trace(11662): error opening trace file: No such file or directory (2)
10-09 17:57:30.759: D/gralloc_goldfish(11662): Emulator without GPU emulation detected.
Файл создан. Но когда я реализовал код для создания файла с OnClick, он этого не сделал. Или когда я поместил создание файла в класс, отличный от основного, он не создал файл.
вот мой основной код: `package com.newapp;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
newFile();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public String timeStamp(){
Date myDate = new Date();
return (DateFormat.getDateInstance().format(myDate) + " " + DateFormat.getTimeInstance().format(myDate));
}
public void newFile (){
String FILENAME = timeStamp();
String string = "hello world!";
FileOutputStream fos = null;
try {
fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fos.write(string.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}`
Я избавился от кнопки и других классов на данный момент. Это весь код, отличный от обычного экрана приветствия, который они вам дают, и неизмененного манифеста.
РЕДАКТИРОВАТЬ Приведенный выше код работает, и файл создается в /data/data/com.newapp/files. Просто запустите его еще раз, чтобы убедиться, что файл создан и получил это от кота.
10-09 17: 57: 29.482: D / dalvikvm (11662): не поздно включить CheckJNI (уже включен) 10-09 17:57:30.078: E/Trace(11662): ошибка при открытии файла трассировки: такого файла нет или directory (2) 10-09 17:57:30.759: D/gralloc_goldfish(11662): эмулятор без эмуляции GPU обнаружен. 10-09 18:53:35.238: D/dalvikvm(11662): отладчик отключился; Реестр объектов имел 1 записей 10-09 18:53:53.389: E/Trace(14975): ошибка при открытии файла трассировки: Нет такого файла или каталога (2) 10-09 18:53:54.658: I/Choreographer(14975): Пропущено 36 кадров! Приложение может выполнять слишком много работы в своем основном потоке. 10-09 18:53:54.668: D/gralloc_goldfish(14975): обнаружен эмулятор без эмуляции графического процессора.
Я собираюсь перевести его в свой собственный класс и попробовать.
Вот создание файла в своем собственном классе: package com.newapp;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
public class NewFile extends Activity {
public String timeStamp(){
Date myDate = new Date();
return (DateFormat.getDateInstance().format(myDate) + " " + DateFormat.getTimeInstance().format(myDate));
}
public NewFile (){
String FILENAME = timeStamp();
String string = "hello world!";
FileOutputStream fos = null;
try {
fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fos.write(string.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
И вот основное занятие:
package com.newapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NewFile firstone = new NewFile();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Наконец, я попробовал несколько разных способов с использованием NewFile(); как конструктор, как обычный метод и вызов firstone.newFile(); Сейчас у него много проблем, и он даже не будет работать на виртуальном устройстве или планшете.
1 ответ
Я выяснил проблему с помощью друга. Вы не можете "расширять деятельность" в новом классе. Вы должны использовать контекст для ссылки на класс. Окончательный код для класса NewFile:
package com.newapp;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
import android.content.Context;
public class NewFile{
public String timeStamp(){
Date myDate = new Date();
return (DateFormat.getDateInstance().format(myDate) + " " + DateFormat.getTimeInstance().format(myDate));
}
public void createFile(Context c) throws IOException{
String FILENAME = timeStamp();
String string = "hello world!";
FileOutputStream fos = c.openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
}
}
а в основной класс вам просто нужно позвонить:
NewFile firstfile = new NewFile();
firstfile.createFile(getBaseContext());
В методе onCreate.
Спасибо