java - 当我失去互联网连接时,我似乎无法访问我的 sqlite 数据。安卓

标签 java android sqlite

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

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;

        }
    }
}

这里是我显示最多数据的地方。

public class Human_Resources extends MainActivity{
    TextView dbView;
    EditText searchtxt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.human_resources);

        dbView = (TextView) findViewById(R.id.showdb);
        searchtxt = (EditText) findViewById(R.id.searchtxt);
        dbView.setMovementMethod(new ScrollingMovementMethod());
        dbView.setText(SQLitePrint("HRinfotbl"));

        Button search = (Button) findViewById(R.id.searchbtn);
        search.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) 
        {
            dbView.setText(Search(searchtxt.getText().toString()));

        }
        });
    }



}

我也是上周开始接触 android 的新手。所以在给出答案时请记住这一点 ;) 谢谢!

这是我的错误日志。关于我何时尝试显示 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 

最佳答案

原因是您在未检查的情况下删除主 Activity 中的表。以下几行是您的问题。这里发生的事情是你删除表数据,当你启动你的应用程序时。因此,除非您没有互联网连接,否则不要盲目删除表格数据。

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

如果互联网可用,您可以检查互联网,然后删除并获取数据,否则不要删除数据,因此您可以在此处查看 所以你必须在这里检查

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

关于java - 当我失去互联网连接时,我似乎无法访问我的 sqlite 数据。安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21130587/

相关文章:

java - 调用对应的 set 方法时获取对象值

android - 将游标传递给服务

ios - 我想使用 swiftdata (ryanfowler) 在 swift 2 中使用 sqlite 但有 120 个错误,我该怎么办?

android - 创建一个非全屏模式窗口

sqlite - 在 SQLite 中使用 UUID

java - 服务的任何公共(public)方法的 AOP 切入点表达式

java - 我的测试用例中预期异常的正确组合是什么?

java - 如何在 Eclipse 中添加丢失的包?

android - 在 TextView 中添加文本

android - 如何管理已安装的应用程序(必要时具有root权限)?