Java 在我断开互联网连接的那一刻,我似乎无法访问我的sqlite数据。安卓
我创建了一个应用程序,它只是让数据可以在移动设备上访问。这是应该发生的事情 1) 连接到MySQL数据库 2) 从MySQL数据库中提取数据 3) 将数据保存到SQLite数据库 4) 显示SQLite数据库中的数据 当我可以上网时,这一切都很好。但似乎在我失去连接的那一刻,我就不能再从SQLite数据库访问数据了。。。。该应用程序的全部目的是让数据在任何地方都可以访问,无论有没有互联网,也就是本地数据库。希望有人能帮我这个Java 在我断开互联网连接的那一刻,我似乎无法访问我的sqlite数据。安卓,java,android,sqlite,Java,Android,Sqlite,我创建了一个应用程序,它只是让数据可以在移动设备上访问。这是应该发生的事情 1) 连接到MySQL数据库 2) 从MySQL数据库中提取数据 3) 将数据保存到SQLite数据库 4) 显示SQLite数据库中的数据 当我可以上网时,这一切都很好。但似乎在我失去连接的那一刻,我就不能再从SQLite数据库访问数据了。。。。该应用程序的全部目的是让数据在任何地方都可以访问,无论有没有互联网,也就是本地数据库。希望有人能帮我这个 public class MainActivity extends A
public class MainActivity extends Activity {
SQLiteDatabase HRdb;
InputStream isr = null;
String result = "";
TextView resultView;
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HRdb=openOrCreateDatabase("HRdb",MODE_PRIVATE,null);
HRdb.execSQL("CREATE TABLE IF NOT EXISTS HRinfotbl (lname VARCHAR, fname VARCHAR, email VARCHAR, contact VARCHAR);");
try {
result = new httprRequest().execute().get();
HRdb.delete("HRinfotbl", null, null);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
resultView = (TextView) findViewById(R.id.result);
getData();
}
/*
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
*/
//function to print data from SQLite array
public String SQLitePrint(String n)
{
String info = "";
Cursor c=HRdb.rawQuery("SELECT * from "+n+";", null);
int count = c.getCount();
c.moveToFirst();
for (Integer j = 0; j < count; j++)
{
info = info +
"Surname : "+c.getString(c.getColumnIndex("lname"))+"\n"+
"Name : "+c.getString(c.getColumnIndex("fname"))+"\n"+
"Email : "+c.getString(c.getColumnIndex("email"))+"\n"+
"Contact : "+c.getString(c.getColumnIndex("contact"))+"\n\n";
c.moveToNext() ;
}
HRdb.close();
return info;
}
public String Search(String n)
{
String info = "";
Cursor cu = HRdb.rawQuery("SELECT * FROM HRinfotbl WHERE (lname LIKE '%||"+n+"||%' OR fname LIKE '%||"+n+"||%';",null);
int count = cu.getCount();
cu.moveToFirst();
for (Integer j = 0; j < count; j++)
{
info = info +
"Surname : "+cu.getString(cu.getColumnIndex("lname"))+"\n"+
"Name : "+cu.getString(cu.getColumnIndex("fname"))+"\n"+
"Email : "+cu.getString(cu.getColumnIndex("email"))+"\n"+
"Contact : "+cu.getString(cu.getColumnIndex("contact"))+"\n\n";
cu.moveToNext() ;
}
HRdb.close();
return info;
}
public void getData(){
String name,surname,email,contact;
//parse json data
try {
JSONArray jArray = new JSONArray(result);
for(int i=0; i<jArray.length();i++){
JSONObject json = jArray.getJSONObject(i);
surname = json.getString("surname");
name = json.getString("name");
email = json.getString("email");
contact = json.getString("contact");
HRdb.execSQL("INSERT INTO HRinfotbl VALUES ('"+surname+"','"+name+"','"+email+"','"+contact+"');");
resultView.setText("Succesfully updated your database.");
}
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error Parsing Data "+e.toString());
}
}
private class httprRequest extends AsyncTask<String,Integer,String>{
@Override
public String doInBackground(String... params){
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("pvt");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
if(response.getStatusLine().getStatusCode()!=200){
Log.d("MyApp", "Server encontered an error.");
}
HttpEntity entity = response.getEntity();
isr = entity.getContent();
}catch(Exception e){
Log.e("log_entity", "Error in http connection: "+e.toString());
}
//conversion happening here..
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(isr,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
isr.close();
result = sb.toString();
}
catch(Exception e){
Log.e("log_buf", "Error converting result "+e.toString());
}
return result;
}
}
}
而且我对安卓非常陌生,从上周开始。所以在回答问题时,请记住这一点;)谢谢
这是我的错误日志。关于何时尝试显示SQLite。分贝
01-15 08:47:16.856: W/ResourceType(7501): Failure getting entry for 0x01080a03 (t=7 e=2563) in package 0 (error -75)
01-15 08:47:16.876: E/log_entity(7501): Error in http connection: java.net.UnknownHostException: Unable to resolve host "www.deltabec.com": No address associated with hostname
01-15 08:47:16.876: E/log_buf(7501): Error converting result java.lang.NullPointerException: lock == null
01-15 08:47:16.876: E/log_tag(7501): Error Parsing Data org.json.JSONException: End of input at character 0 of
原因是您正在删除主活动中的表而未进行检查。以下几行是您的问题。这里发生的事情是,当您启动应用程序时,
删除表数据。所以不要盲目删除表格数据,除非你没有互联网连接
try {
result = new httprRequest().execute().get();
HRdb.delete("HRinfotbl", null, null);// This cause the problem.
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果internet可用,您可以检查internet,然后删除并获取数据,否则不要删除数据,因此您可以在此处进行检查
所以你必须像这样检查这里
try {
result = new httprRequest().execute().get();
// A work around to fix the problem
if(internet avialable) {
HRdb.delete("HRinfotbl", null, null);
} else {
getData();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
您在LogCat中遇到了什么错误?您显然在Activity onCreate中执行请求。确保在没有互联网的情况下完全回退到sqlite。@LoïcFaure Lacroix嗯,我可能没有听到你说的话,但正如我在人力资源中看到的,我正在从创建sqlite数据库的activity调用函数。另外,当它被创建时,无论在哪里,它都不会在设备存储上物理地创建一个本地数据库吗?我的主要活动只在某个单击时被调用。因此,如果我更新了数据库,那么就转到查看SQLite数据库。只要我不再更新它就不应该删除数据。。。这就是我的理解。我正试图解决这个问题,只是努力用一种简单的方式检查互联网。如果你知道一个方法,请链接。看看它。这是为了检查互联网是否可用。谢谢,如果您的主要活动是在某个特定的点击上调用的,并且您没有互联网连接。在这种情况下,数据将被删除。谢谢,该链接正是我解决连接问题所需要的。但是当我打开我的本地数据库时,它仍然有问题,当我松开internet时,它不会从我的本地SQLite数据库中显示…哇。。不要介意。。成功了。哈哈,非常感谢xD所做的一切,我现在可以在没有互联网的情况下查看SQLite;)
try {
result = new httprRequest().execute().get();
// A work around to fix the problem
if(internet avialable) {
HRdb.delete("HRinfotbl", null, null);
} else {
getData();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}