2013-09-19 3 views
0

Вот мой сценарий.Как получить XML-файл из активов через поток в Android?

Я MainActivity.java, в котором я звоню нить как этот

private void callXMLParserThread() { 

    String filePath = "file:///android_asset/weather_conditions.xml"; 
    parserThread = new XMLParserThread(context, filePath); 
    parserThread.start(); 

} 

и вот мой XMLParserThread.java

public class XMLParserThread extends Thread { 

Context context; 
String fileName; 
XMLParser xmlParser; 

public XMLParserThread(Context context, String fileName) { 

    this.context = context; 
    this.fileName = fileName; 
} 

@Override 
public void run() { 

    xmlParser = new XMLParser(); 

    String xmlResponse = null; 
    try { 
     xmlResponse = xmlParser.getXmlFromFile(context, fileName); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    Log.d("xmlResponse", xmlResponse + ""); 

    super.run(); 
} 

} 

Примечание: В перспективе() метод, который я звоню в другой метод getXmlFromFile() проживает в XMLParser.java

Теперь здесь мой getXmlFromFile() способ.

public String getXmlFromFile(Context context, String fileName) throws IOException { 

    Log.e("fileName", fileName); 

    InputStream is = null; 
    try { 
     is = context.getAssets().open(fileName); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    BufferedInputStream bis = new BufferedInputStream(is); 
    ByteArrayOutputStream buf = new ByteArrayOutputStream(); 
    int result = bis.read(); 
    while(result != -1) { 
     byte b = (byte)result; 
     buf.write(b); 
     result = bis.read(); 
    }   
    return buf.toString(); 
} 

Проблема

Когда я выполняю код он бросает java.io.FileNotFoundException: file:///android_asset/weather_conditions.xml at xml.parser.XMLParser.getXmlFromFile(XMLParser.java:43)

, где линия не 43 is = context.getAssets().open(fileName); в моем getXmlFromFile() методе

Кроме того, я уверен, что файл существует в папке с ресурсами. Где я ошибаюсь?

+0

Где находится папка? Я думаю, что ваш путь является абсолютным, но если я не ошибаюсь, приложения не могут получить доступ к корневой папке. Вы можете взглянуть на документацию: http://developer.android.com/training/basics/data-storage/files.html –

ответ

0

Если я не ошибаюсь, вы можете просто сказать, как показано ниже, без этой части «file: /// ...».

String filePath = "weather_conditions.xml"; 
1

Когда вы определяете путь от активов, пишите только путь к подпапке активов.

Если у вас есть файл XML под:

assets/android_asset/weather_conditions.xml 

так путь к файлу должен быть:

String filePath = "android_asset/weather_conditions.xml"; 

Кстати, у вас есть помощник в вашем коде:

is = context.getAssets().open(fileName); 

context.getAssets() означает открытое assets папку и найти путь там.

+0

благодарит за описание. –

Смежные вопросы