Внутренняя память для 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.

Спасибо

Другие вопросы по тегам