我在Android应用程序中使用了WebView
。我的问题很奇怪,因为应用程序抛出异常:
07-20 08:33:21.013:ERROR / SQLiteDatabase(728):android.database.sqlite.SQLiteCantOpenDatabaseException:无法打开数据库文件
我没有使用任何数据库。如何解决这个问题?
来源:
在onClick
的主要活动中:
String url = listeRubrique.get(rubriqueChoisit).getListeVideo().get(paramInt).getUrl();
if (url != null)
{
Intent intent = new Intent(Main.this,Lecture.class);
intent.putExtra("url",url);
startActivity(intent);
}
WebView
所在的第二个活动:
public class Lecture extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.lecture);
webView = (WebView)findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
Intent myIntent = getIntent();
webView.loadUrl(myIntent.getStringExtra("url"));
}
}
我的第一项活动:
package com...
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import com...
public class Main extends Activity {
//Listes
ArrayList<Video> listeVideo = new ArrayList<Video>();
ArrayList<Chapitre> listeRubrique = new ArrayList<Chapitre>();
//ListViews
private ListView listViewVideo;
private ListView listViewRubrique;
//TextViews
private TextView tvTitreRubrique;
private TextView tvDescriptionRubrique;
private TextView tvTitreVideo;
private TextView tvDescriptionVideo;
private TextView tvDureeVideo;
//Button
private Button btLancer;
int rubriqueChoisit;
int videoChoisit;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listViewVideo =(ListView)findViewById(R.id.listContenuRubrique);
listViewRubrique =(ListView)findViewById(R.id.lvContenu);
tvTitreRubrique = (TextView)findViewById(R.id.tvTitreRubrique);
tvDescriptionRubrique = (TextView)findViewById(R.id.tvDescriptionRubrique);
tvTitreVideo = (TextView)findViewById(R.id.tvTitreVideo);
tvDescriptionVideo = (TextView)findViewById(R.id.tvDescriptionVideo);
tvDureeVideo = (TextView)findViewById(R.id.tvDureeVideo);
btLancer = (Button)findViewById(R.id.btLancer);
listeVideo.add(new Video(1,"Titre","My Link","Description de la video"));
listeRubrique.add(new Chapitre(1,"...","...",listeVideo));
ListViewRubriqueAdapter rubriqueAdapter = new ListViewRubriqueAdapter(Main.this, listeRubrique);
listViewRubrique.setAdapter(rubriqueAdapter);
listViewRubrique.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> paramAdapterView, View paramView, int paramInt, long paramLong)
{
ListViewVideoAdapter videoAdapter = new ListViewVideoAdapter(Main.this, listeRubrique.get(paramInt));
listViewVideo.setAdapter(videoAdapter);
tvTitreRubrique.setText(listeRubrique.get(paramInt).getTitre());
tvDescriptionRubrique.setText(listeRubrique.get(paramInt).getDescription());
}
});
listViewVideo.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> paramAdapterView, View paramView, int paramInt, long paramLong)
{
String url = listeRubrique.get(rubriqueChoisit).getListeVideo().get(paramInt).getUrl();
if (url != null)
{
Intent intent = new Intent(Main.this,Lecture.class);
intent.putExtra("url",url);
startActivity(intent);
}
}
});
}
答案 0 :(得分:1)
此问题是由您的应用程序更新引起的。有时,在升级应用程序时,缓存目录的权限会被卡住,因此您的应用程序无法写入它们。我发现目录的权限保留在旧的PID下,而升级的应用程序被分配了一个新的PID。不幸的是,没有办法更新旧的安装权限/ PID配对。
这会导致您的问题,据我所知,除了设备的恢复出厂设置外,没有什么能解决这个问题。
请参阅http://code.google.com/p/android/issues/detail?id=949或搜索类似的异常,其中SQLite无法打开/写入,或者SharedPreferences也遇到类似的问题。
答案 1 :(得分:1)
对我来说,每个WebView
每个应用程序都有自己的webview.db
,如果webview.db
是由另一个版本的应用程序创建的,或者应用程序的签名不同,那么当前应用程序可以'访问现有的webview.db
。
我有一个类似的例外,通过清理所有应用程序数据并删除应用程序来摆脱它。
答案 2 :(得分:0)
webView = (WebView)findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
Bundle bundle = getIntent().getExtras();
webView.loadUrl(bundle.getString("url"));