#java #android #eclipse
#java #Android #eclipse
Вопрос:
Проблема в том, что строка, которая записывается в outputstreamswriter, имеет правильное значение, но в блоке try / catch в методе onclick() диалогового окна outputstreamwriter не работает. Мое имя файла default.txt я уверен, что имя файла не имеет никакого отношения к проблеме. outputstreamwriter не изменяет содержимое файла вообще, я пробовал bufferwriter или fileoutputstream, но, похоже, ничего не работает. Пожалуйста, помогите, я уже несколько дней схожу с ума!
вот код.
package zafus.personalitymeter;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import android.R.integer;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout.LayoutParams;
public class ChoseAnswers extends Activity {
private final String TAG="";
public String vale;
public List<String> obj;
public int numOfAnswers=0;
//public RelativeLayout mylayout =(RelativeLayout)findViewById(R.id.calayout);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chose_answers);
obj=null;
obj=readFromFile("answer.txt", this);
numOfAnswers=Integer.valueOf(obj.get(0).toString());
int i=1;
LinearLayout mylayout =(LinearLayout)findViewById(R.id.linearLayout1);
while(i<=numOfAnswers){
Button tt = new Button(this);
tt.setText(obj.get(i));
tt.setId(i 1);
tt.setPadding(5, 10, 5, 10);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
tt.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
vale=((Button)v).getText().toString();
AlertDialog.Builder dlgAlert1 = new AlertDialog.Builder(ChoseAnswers.this);
dlgAlert1.setMessage("Show this answer as a result of next test?");
dlgAlert1.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
obj=null;
obj=readFromFile("default.txt", ChoseAnswers.this);
obj.set(1,vale);
String receiveString = "";
int num=Integer.valueOf(obj.get(0)) 2;
StringBuilder ab = new StringBuilder();
int i=0;
for(;i<num;i ){
ab.append(obj.get(i) "n");
}
receiveString=ab.toString();
try {
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("default.txt", Context.MODE_PRIVATE));
//outputStreamWriter.write("");
outputStreamWriter.write(receiveString);
outputStreamWriter.close();
}
catch (IOException e) {
Log.e(TAG, "File write failed: " e.toString());
}
ChoseAnswers.this.finish();
}});
dlgAlert1.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}});
dlgAlert1.show();
}
});
if (i == 1){
params.setMargins(0, 150, 0, 20);
}
else{
params.setMargins(0, 20, 0, 20);
}
tt.setLayoutParams(params);
tt.setBackgroundResource(R.drawable.bxml);
tt.setTextColor(Color.parseColor("#330011"));
mylayout.addView(tt);
i ;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.choseanswers, menu);
return true;
}
public static List<String> readFromFile(String fileName, Context context) {
List<String> words = new ArrayList<String>();
InputStream fIn = null;
InputStreamReader isr = null;
BufferedReader input = null;
try {
fIn = context.getResources().getAssets().open(fileName, context.MODE_WORLD_READABLE);
isr = new InputStreamReader(fIn);
input = new BufferedReader(isr);
String line = "";
while ((line = input.readLine()) != null) {
words.add(line);
}
} catch (Exception e) {
e.getMessage();
} finally {
try {
if (isr != null)
isr.close();
if (fIn != null)
fIn.close();
if (input != null)
input.close();
} catch (Exception e2) {
e2.getMessage();
}
}
return words;
}
}
Ответ №1:
В вашем onClick вы считываете файл из ресурсов и сохраняете его во внутренней памяти. При следующем нажатии происходит то же самое. Вам также следует прочитать файл из внутренней памяти, если вы хотите проверить, удалась ли запись.
Комментарии:
1. Разве файл в активах на самом деле не является файлами во внутренней памяти
2. Я также использовал метод getfiledirectory (), он тоже не сработал
3. getfiledirectory() ? Вы не опубликовали этот код. И нет, ресурсы завершают работу, отличную от внутренней памяти. Каталог ресурсов определяется в Eclipse папкой ресурсов в вашем проекте.
4. Когда apk формирует способ сохранения файла ресурсов во внутренней памяти. и теперь, если мне нужно прочитать файл из внутренней памяти, можете ли вы дать мне какой-нибудь код по этому поводу спасибо!
5. Создайте копию,
readFromFile
которую вы назоветеreadFromAssets
. Затем вreadFromFile
вам нужно всего лишь изменить строкуfIn = context.getResources().getAssets().open(fileName, context.MODE_WORLD_READABLE);
наfIn = context.openFileInput(fileName, context.MODE_WORLD_READABLE);
. Как скопировать файл из ресурсов во внутреннюю память, вы уже знаете, потому что это то, что вы делали все время. Ну, грязно, но все равно.