Java 在我断开互联网连接的那一刻,我似乎无法访问我的sqlite数据。安卓

Java 在我断开互联网连接的那一刻,我似乎无法访问我的sqlite数据。安卓,java,android,sqlite,Java,Android,Sqlite,我创建了一个应用程序,它只是让数据可以在移动设备上访问。这是应该发生的事情 1) 连接到MySQL数据库 2) 从MySQL数据库中提取数据 3) 将数据保存到SQLite数据库 4) 显示SQLite数据库中的数据 当我可以上网时,这一切都很好。但似乎在我失去连接的那一刻,我就不能再从SQLite数据库访问数据了。。。。该应用程序的全部目的是让数据在任何地方都可以访问,无论有没有互联网,也就是本地数据库。希望有人能帮我这个 public class MainActivity extends A

我创建了一个应用程序,它只是让数据可以在移动设备上访问。这是应该发生的事情

1) 连接到MySQL数据库

2) 从MySQL数据库中提取数据

3) 将数据保存到SQLite数据库

4) 显示SQLite数据库中的数据

当我可以上网时,这一切都很好。但似乎在我失去连接的那一刻,我就不能再从SQLite数据库访问数据了。。。。该应用程序的全部目的是让数据在任何地方都可以访问,无论有没有互联网,也就是本地数据库。希望有人能帮我这个

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();
    }