2010-11-10 33 views
0

我有一个文本文件,我从我的SD卡,其中包含纯文本格式的数组拉。下面是该文件的我试图导入文本文件转换成字符串的内容...Android:从文件导入并从字符串转换的阵列的问题

http://www.oddree.com/rayhaque/android1.jpg,http://www.oddree.com/rayhaque/android2.jpg,http://www.oddree.com/rayhaque/android3.jpg,http://www.oddree.com/rayhaque/android4.jpg,http://www.oddree.com/rayhaque/android5.jpg 

,该字符串转换成数组,然后加载数组列表适配器。如果我尝试分割readString或readString的修剪结果,每次都会强制关闭。如果我将该文件的内容复制到一个字符串中,然后使用它...一切都按预期工作。

那么从一个文本文件加载这个东西和从一个包含的字符串加载它有什么区别?这是一个字节转换问题吗?

这是我的代码。我注意到了什么有效,哪些失败了。

public class MainActivity extends Activity { 

ListView list; 
LazyAdapter adapter; 
List<String> strings = new ArrayList<String>(); 
String readString = new String(); 
String arrayNBOW; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    try{ 
    File f = new File(Environment.getExternalStorageDirectory()+"/LazyList/gkindex.txt"); 
    FileInputStream fileIS = new FileInputStream(f); 
    BufferedReader buf = new BufferedReader(new InputStreamReader(fileIS)); 

    while((readString = buf.readLine())!= null){ 
     String arrayNBOW = readString.trim(); 
     Toast.makeText(MainActivity.this, "STARTUPPULL: "+arrayNBOW, Toast.LENGTH_LONG).show(); 
    } 
    } catch (FileNotFoundException e) { 
    Toast.makeText(MainActivity.this, "FAIL: "+e, Toast.LENGTH_LONG).show(); 
    e.printStackTrace(); 
    } catch (IOException e){ 
    Toast.makeText(MainActivity.this, "FAIL: "+e, Toast.LENGTH_LONG).show(); 
    e.printStackTrace(); 
    } 

    setContentView(R.layout.main); 
    list=(ListView)findViewById(R.id.list); 

    String testArray = "http://www.oddree.com/rayhaque/android1.jpg,http://www.oddree.com/rayhaque/android2.jpg,http://www.oddree.com/rayhaque/android3.jpg"; 

    // THIS FAILS 
    // String[] testArraySplit = TextUtils.split(arrayNBOW, ","); 

    // THIS WORKS 
    String[] testArraySplit = TextUtils.split(testArray, ","); 

    adapter=new LazyAdapter(this, testArraySplit); 
list.setAdapter(adapter); 

    Button b=(Button)findViewById(R.id.button1); 
    b.setOnClickListener(listener); 

    Button c=(Button)findViewById(R.id.button2); 
    c.setOnClickListener(loadtext); 

} 

预先感谢您的任何意见或协助,您可以提供给我! :-)

解决方案中创建FROM EMANNUEL的建议:

public class MainActivity extends Activity { 

ListView list; 
LazyAdapter adapter; 
List<String> strings = new ArrayList<String>(); 
String readString = new String(); 
String arrayNBOW; 
String[] nardsArray; 
String nards; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

//新的解决方案

File sdcard = Environment.getExternalStorageDirectory(); 
    File file = new File(sdcard,"/LazyList/gkindex.txt"); 
    StringBuilder text = new StringBuilder(); 

    try { 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     String line; 

     while ((line = br.readLine()) != null) { 
      text.append(line); 
      text.append('\n'); 
      nards = text.toString(); 
      nardsArray = TextUtils.split(nards, ","); 
     } 
    } 
    catch (IOException e) { 
     Toast.makeText(MainActivity.this, "FAIL: "+e, Toast.LENGTH_LONG).show(); 
    } 

//结束新的解决方案

Toast.makeText(MainActivity.this, "FILE-READ: "+nardsArray, Toast.LENGTH_LONG).show(); 

    setContentView(R.layout.main); 
    list=(ListView)findViewById(R.id.list); 

    adapter=new LazyAdapter(this, nardsArray); 
    list.setAdapter(adapter); 

    Button b=(Button)findViewById(R.id.button1); 
    b.setOnClickListener(listener); 

    Button c=(Button)findViewById(R.id.button2); 
    c.setOnClickListener(loadtext); 

} 
+0

您是否尝试过在调试器中设置断点,并在调用split()之前查看arrayNBOW的值是什么? – kcoppock 2010-11-10 16:38:22

+0

您必须向我们展示您的堆栈跟踪。 – Falmarri 2010-11-10 18:55:51

回答

2

我怀疑你的阅读没没有工作。我注意到的第一件事是关闭流没有最后的条款。其次是你循环直到文件结束。如果你在那里有空行呢?检查空的“”线。你也应该在有内容的第一行打破。

而且,我更喜欢使用像this一个的FileReader:

这是否帮助?

+0

是的,如果读取失败,那么当调用split导致NullPointerException和强制关闭时,arrayNBOW仍然为空。 – 2010-11-10 17:28:31

+0

谢谢Emmanuel。这个例子效果更好。不知道如何从一个StringBuilder转换为一个数组,我首先转换为一个字符串,然后转换为一个数组。可能有更好的方法来处理这个问题,但它适用于我的目的!我在问题内容中发布我的新代码。 – RayHaque 2010-11-10 18:57:01