将列表视图中的项目保存到android中的文本文件
我正在使用otg电缆从外部usb存储中浏览xml文件,该电缆连接在平板电脑/android手机中进行解析 步骤: 从外部usb存储器浏览文件 解析xml文件 将文件保存在文本文件中 目前,我可以浏览和解析xml文件,然后显示解析后的文件,其中在listview中显示所需的信息。现在,我想将显示的信息保存为文本文件,并将其保存到平板电脑的外部sd卡。代码如下: Model.java: ModelParser.java: 和ReadActivity.java:将列表视图中的项目保存到android中的文本文件,android,android-listview,text-files,Android,Android Listview,Text Files,我正在使用otg电缆从外部usb存储中浏览xml文件,该电缆连接在平板电脑/android手机中进行解析 步骤: 从外部usb存储器浏览文件 解析xml文件 将文件保存在文本文件中 目前,我可以浏览和解析xml文件,然后显示解析后的文件,其中在listview中显示所需的信息。现在,我想将显示的信息保存为文本文件,并将其保存到平板电脑的外部sd卡。代码如下: Model.java: ModelParser.java: 和ReadActivity.java: 问题是,我想保存Id,但当我单击“保存
问题是,我想保存Id,但当我单击“保存”按钮时,SystemInfo.txt中的值为空。您将模型存储在另一个对象中,并试图从新对象检索它 这是在ModelParser中存储模型对象的地方 而您正试图从ReadActivity中的新对象检索它 通过在ReadActivity中调用ModelParser的getItemsList获取对模型arraylist的引用,并尝试从中获取模型对象 检查下面代码中下面两行的位置
ModelParser parser = new ModelParser();
ArrayList<Model> modelList = parser.getItemsList();
Model modd = modelList.get(0);
注意,您需要删除ModelParser=newmodelparser;从LoadSystemTask
public class ReadActivity extends ListActivity implements OnClickListener {
public List<Model> model = null;
private String filename = "SystemInfo.txt";
ModelParser parser = new ModelParser();
//-----------------
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read);
new LoadSystemTask().execute();
Button save = (Button) findViewById(R.id.btnSave);
save.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// write on SD card file data in the text box
if (isSDCardWritable()) {
ArrayList<Model> modelList = parser.getItemsList();
//-----
Model modd = modelList.get(0);
StringBuilder locationStrBuilder = new StringBuilder();
locationStrBuilder.append("Model ID: "+ modd);
String locationStr = locationStrBuilder.toString();
try {
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File(sdCard.getAbsolutePath()+"/FileReader");
directory.mkdirs();
File myFile = new File(directory, filename);
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile, true);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(locationStr);
myOutWriter.close();
fOut.close();
Toast.makeText(getBaseContext(),"Done writing to SD Card",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
} }
else
{
// SD Card Not Available
Toast.makeText(getBaseContext(),"SD Card Not Available",Toast.LENGTH_SHORT).show();
} //else
}// onClick
}); // btnSave
}
private class LoadSystemTask extends AsyncTask<String, Void, List<Model>> {
@Override
protected List<Model> doInBackground(String... args) {
// CALL XMLPULLPARSER & RETURN A LIST
model = parser.parse(getBaseContext());
return model;
}
你好,你的问题是什么?在最后一部分。当我在生成的文件中单击“保存”按钮而不是获取模型id时,得到的是空值,您是否具有外部存储写/读权限@肯尼,是的,我在android清单中有写权限。为了解决问题,我可以在外部存储器中创建一个新文件夹,并编写或保存名为SystemInfo.txt的文件。问题是模型id返回一个空值,我已经尝试过这样做;GarminModelParser modId=新的GarminModelParser;ArrayList modd=modId.getItemsList;GarminModel mod_id=modd.get0;但由于IndexOutOfBoundsException,应用程序崩溃。不要将GarminModelParser的新实例设置为GarminModelParser modId=new GarminModelParser;而是创建一个在LoadSystemTask中填充的全局ModelParser变量。变量模型不是这样做的吗?关键是不要创建新的对象GarminModelParser并从中提取。而是从包含已解析项的对象中获取列表项。因此,您也可以在按钮单击中执行model.get0,因为它有解析的项。但我只需要第一件东西。所以当我这么做的时候:String modd=model.get0;我得到一个错误,说我应该把modd的类型从String改为GarminModel。当我这样做时,应用程序会得到一个NullPointerException
public class ReadActivity extends ListActivity implements OnClickListener {
public List<Model> model = null;
private String filename = "SystemInfo.txt";
String modd = modId.getModel();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read);
new LoadSystemTask().execute();
Button save = (Button) findViewById(R.id.btnSave);
save.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// write on SD card file data in the text box
if (isSDCardWritable()) {
StringBuilder locationStrBuilder = new StringBuilder();
locationStrBuilder.append("Model ID: "+ modd);
String locationStr = locationStrBuilder.toString();
try {
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File(sdCard.getAbsolutePath()+"/FileReader");
directory.mkdirs();
File myFile = new File(directory, filename);
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile, true);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(locationStr);
myOutWriter.close();
fOut.close();
Toast.makeText(getBaseContext(),"Done writing to SD Card",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
} }
else
{
// SD Card Not Available
Toast.makeText(getBaseContext(),"SD Card Not Available",Toast.LENGTH_SHORT).show();
} //else
}// onClick
}); // btnSave
}
private class LoadSystemTask extends AsyncTask<String, Void, List<Model>> {
@Override
protected List<Model> doInBackground(String... args) {
// CALL XMLPULLPARSER & RETURN A LIST
ModelParser parser = new ModelParser();
model = parser.parse(getBaseContext());
return model;
}
@Override
protected void onPostExecute(List<Model> models) {
ArrayAdapter<Model> adapter = new ArrayAdapter<Model>(getBaseContext(), android.R.layout.simple_list_item_1, models);
setListAdapter(adapter);
}
}
public boolean isSDCardWritable() {
String status = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(status))
{
return true;
}
return false;
} //isSDCardWritable
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
current = new GarminModel()
GarminModel modId = new GarminModel();
String modd = modId.getModel();
ModelParser parser = new ModelParser();
ArrayList<Model> modelList = parser.getItemsList();
Model modd = modelList.get(0);
public class ReadActivity extends ListActivity implements OnClickListener {
public List<Model> model = null;
private String filename = "SystemInfo.txt";
ModelParser parser = new ModelParser();
//-----------------
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read);
new LoadSystemTask().execute();
Button save = (Button) findViewById(R.id.btnSave);
save.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// write on SD card file data in the text box
if (isSDCardWritable()) {
ArrayList<Model> modelList = parser.getItemsList();
//-----
Model modd = modelList.get(0);
StringBuilder locationStrBuilder = new StringBuilder();
locationStrBuilder.append("Model ID: "+ modd);
String locationStr = locationStrBuilder.toString();
try {
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File(sdCard.getAbsolutePath()+"/FileReader");
directory.mkdirs();
File myFile = new File(directory, filename);
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile, true);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(locationStr);
myOutWriter.close();
fOut.close();
Toast.makeText(getBaseContext(),"Done writing to SD Card",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
} }
else
{
// SD Card Not Available
Toast.makeText(getBaseContext(),"SD Card Not Available",Toast.LENGTH_SHORT).show();
} //else
}// onClick
}); // btnSave
}
private class LoadSystemTask extends AsyncTask<String, Void, List<Model>> {
@Override
protected List<Model> doInBackground(String... args) {
// CALL XMLPULLPARSER & RETURN A LIST
model = parser.parse(getBaseContext());
return model;
}