我的资产文件夹中有一个文件...如何阅读?
现在我正在尝试:
public static String readFileAsString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader = new BufferedReader(
new FileReader(filePath));
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
Run Code Online (Sandbox Code Playgroud)
但它抛出一个空指针异常......
该文件名为"origin",它位于文件夹资产中
我试着把它投射:
readFileAsString("file:///android_asset/origin");
Run Code Online (Sandbox Code Playgroud)
和
readFileAsString("asset/origin");``
Run Code Online (Sandbox Code Playgroud)
但都失败了......有什么建议吗?
我正在尝试从assets文件夹中读取相同的文件" xmlfile.xml ",并从SD卡sdcard/download /中读取另一个副本.
我可以从SD卡读取:
我无法从Assets文件夹中读取:
这段代码不适用
File source = new File("file:///android_asset/xmlfile.xml");
boolean unfile = source.isFile();
boolean Esiste = source.exists();
try
{
// todo
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作
File source = new File("/sdcard/" + "download" + "/" + "xmlfile.xml");
boolean unfile = source.isFile();
boolean Esiste = source.exists();
try
{
// todo
} catch (Exception e)
{ …Run Code Online (Sandbox Code Playgroud) 当用户点击我的应用程序的WebView上的标签时,我正试图从assets文件夹中播放声音.我发现我可以使用扩展WebViewClient的新类来检测链接的扩展名,如果是mp3文件,它可以通过默认的音频播放器播放.但是我想让它在没有开始新活动的情况下在活动中发挥作用.
我使用以下链接作为参考: Webview中的声音 和使用Uri创建MediaPlayer或使用资产中的文件时出错
但它没有用.
我尝试使用以下代码执行此操作:
package com.rangga.test.webview.sound;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.net.Uri;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MyWebViewClient extends WebViewClient{
public MediaPlayer mp;
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
if(url.endsWith(".mp3")){
mp = new MediaPlayer();
AssetFileDescriptor afd = getAssets().openFd(url);
mp.setDataSource(afd.getFileDescriptor());
mp.start();
return true;
}else{
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在getAssets()上得到一个未定义的方法错误,我尝试了谷歌它,它说了一些关于传递一个Context的事情.我是Android和面向对象编程的新手,所以我想知道这是否是正确的方法,以及是否有关于Context是什么的简单解释.谢谢.
以下是我的完整代码:
MainActivity.class
package com.rangga.test.webview.sound;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
public class MainActivity extends Activity {
WebView webMain;
/** Called when the activity is …Run Code Online (Sandbox Code Playgroud) 我在android应用程序的assets文件夹中保存了一些文件.
现在我编译该应用程序并获取apk.[当我提取那个apk我的文件在资产文件夹中时]
现在我在移动设备中安装apk
并且在该应用程序中有一些代码在c编程与JNI接口.
现在我fopen()对该文件的c编程调用失败了.
fopen("myfile","r");
Run Code Online (Sandbox Code Playgroud)
我知道在安装apk安卓复制资产文件时 /data/data/com.packagename/something
所以,有人知道这条道路,所以我可以放弃它 fopen()
或者是否有任何其他方法在C编程中打开该文件.
如果我将这些文件保存在sdcard文件夹中并像访问那样fopen("/sdcard/myfile","r");工作文件.但我想只将这些文件保存在assets文件夹中
我的要求是通过内容提供商从另一个应用程序打开一个应用程序的资产文件.(我使用ContentProvider实现公开该文件)
我能够打开几个文件并阅读,但在打开一些文件时我会遇到异常.请找到打开资产文件的实现.
@Override
public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
AssetManager am = getContext().getAssets();
String file_name = uri.getLastPathSegment();
if(file_name == null)
throw new FileNotFoundException();
AssetFileDescriptor afd = null;
try {
afd = am.openFd(file_name);
} catch (IOException e) {
e.printStackTrace();
}
return afd;//super.openAssetFile(uri, mode);
}
Run Code Online (Sandbox Code Playgroud)
有时候am.openFd(file_name);会抛出一个例外说,
java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
at android.content.res.AssetManager.openAssetFd(Native Method)
at android.content.res.AssetManager.openFd(AssetManager.java:329)
at com.pineone.swfinstaller.SwfProvider.openAssetFile(SwfProvider.java:25)
at android.content.ContentProvider$Transport.openAssetFile(ContentProvider.java:218)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:234)
at android.os.Binder.execTransact(Binder.java:288)
at dalvik.system.NativeStart.run(Native Method) …Run Code Online (Sandbox Code Playgroud) 我有一个让我疯狂的问题.我有一个静态的html文件(assets/help/index.html)需要包含一些图像.因为我想要不同密度的不同图像,并且图像已经包含在drawable- {ldpi,mdpi,hdpi}中,我想我会使用以下html代码:
<img src="file:///android_res/drawable/image.png">
Run Code Online (Sandbox Code Playgroud)
这在日食下工作得很好!不幸的是,在生产版本(使用maven android插件构建)中,显示html页面的webview显示了损坏的图像图标.
我尝试使用loadUrl和loadDataWithBaseUrl打开页面(首先自己读取文件),后者使用file:/// android_res/drawable的基本URL.两次尝试都在eclipse下成功但在maven版本中失败了.
所以我解压缩了Eclipse生成的apk和maven生成的一个并在两者之间做了一个diff -r,因为必须有明显区别.
我很困惑,只能找到一些微不足道的差异(主要是签署差异,因为eclipse apk用调试证书签名,而maven用我的官方证书签名).除此之外,apks的内容是相同的!
有没有人知道发生了什么或如何继续发现更多信息?
各位,我将数据库从本地资产文件夹复制到/ data/data/package_name/databases目录时遇到问题.当我使用http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/ 教程来做这件事时,我只能获得一个空文件.
我引用了copyDataBase()方法的一部分并没有区别.每次应用程序启动时,它都会创建目录和空数据库.那么有什么方法可以使copyDataBase()工作吗?
非常感谢你!!
我想创建一个循环进度条,如下图所示
我不知道创建此进度条的方法是什么.我不知道应该准备什么资产.
android android-assets android-animation android-progressbar
我有一个Android应用程序,应该读取和扩展已经在sqlite上创建的数据库...它通过将数据库放在模拟器的文件浏览器上的"data/data /(packagename)/ database"文件夹中,可以在模拟器上正常工作.现在问题出现在真实设备上.显然它没有打开数据库.我试图将数据库放在assets文件夹中,但我没有用openhelper打开它.
我正在尝试在Android Studio中为应用添加启动器图标.
到目前为止我做了什么:
转到res文件夹右键单击并选择new image asset
从那里我找到了我想用作app启动器图标的png文件.
这一步可以在这里看到:http: //i.imgur.com/a1ubNf8.png
如您所见,源资产显示正确,没有白色背景.但是5种不同的图标类型具有白色背景并且失去透明度.
我希望应用程序图标保持透明度而不显示白色背景.