将列表视图中的项目保存到android中的文本文件

将列表视图中的项目保存到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,但当我单击“保存

我正在使用otg电缆从外部usb存储中浏览xml文件,该电缆连接在平板电脑/android手机中进行解析

步骤:

从外部usb存储器浏览文件 解析xml文件 将文件保存在文本文件中 目前,我可以浏览和解析xml文件,然后显示解析后的文件,其中在listview中显示所需的信息。现在,我想将显示的信息保存为文本文件,并将其保存到平板电脑的外部sd卡。代码如下:

Model.java:

ModelParser.java:

和ReadActivity.java:


问题是,我想保存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;
    }