2016-08-18 37 views
-1

我們使用網絡服務創建了一個應用程序。我們的數據類型是json。和Android應用程序可以從IP地址服務器獲取數據。 但他們不出現在數據庫中。我們如何解決它?我們的代碼如下。如何將數據添加到我的android應用程序中的現有數據庫?

DatabaseHelper類

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.ArrayList; 

public class DatabaseHelper extends SQLiteOpenHelper { 

     String DB_PATH = null; 
     private static String DB_NAME = "bosdata.db"; 
     private SQLiteDatabase myDataBase; 
     private final Context myContext; 

     public DatabaseHelper(Context context) { 
      super(context, DB_NAME, null, 10); 
      this.myContext = context; 
      this.DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/"; 
      //Log.e("Path 1", DB_PATH); 
     } 
    // 
    // 
     public void createDataBase() throws IOException { 
      boolean dbExist = checkDataBase(); 
      if (dbExist) { 
      } else { 
       this.getReadableDatabase(); 
       try { 
        copyDataBase(); 
       } catch (IOException e) { 
        throw new Error("Error copying database"); 
       } 
      } 
     } 

     private boolean checkDataBase() { 
      SQLiteDatabase checkDB = null; 
      try { 
       String myPath = DB_PATH + DB_NAME; 
       checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
      } catch (SQLiteException e) { 
      } 
      if (checkDB != null) { 
       checkDB.close(); 
      } 
      return checkDB != null ? true : false; 
     } 

     private void copyDataBase() throws IOException { 
      InputStream myInput = myContext.getAssets().open(DB_NAME); 
      String outFileName = DB_PATH + DB_NAME; 
      OutputStream myOutput = new FileOutputStream(outFileName); 
      byte[] buffer = new byte[10]; 
      int length; 
      while ((length = myInput.read(buffer)) > 0) { 
       myOutput.write(buffer, 0, length); 
      } 
      myOutput.flush(); 
      myOutput.close(); 
      myInput.close(); 

     } 

     public void openDataBase() throws SQLException { 
      String myPath = DB_PATH + DB_NAME; 
      myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 

     } 

     @Override 
     public synchronized void close() { 
      if (myDataBase != null) 
       myDataBase.close(); 
      super.close(); 
     } 


     @Override 
     public void onCreate(SQLiteDatabase db) { 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      if (newVersion > oldVersion) 
       try { 
        copyDataBase(); 
       } catch (IOException e) { 
        e.printStackTrace(); 

       } 
     } 

     public ArrayList<Liste_Model> get_All_Parts() { 
      openDataBase(); 
      ArrayList<Liste_Model> arr = new ArrayList<Liste_Model>(); 


      Cursor c = myDataBase.query("db4OptimumOptimumSiraliRota", null, null, null, null, null, null); 
      if (c != null) { 
       if (c.moveToNext()) { 
        do { 
         Liste_Model model = new Liste_Model(); 
         model.setResim_No(c.getString(0)); 
         model.setKasa_Yeri(c.getString(1)); 
         model.setAraba_Bolme_Yeri(c.getString(2)); 
         arr.add(model); 
        } while (c.moveToNext()); 
       } 
      } 
      c.close(); 
      myDataBase.close(); 
      return arr; 
     } 

     public void add_SiraliListe(Liste_Model model) { 
    SQLiteDatabase myDataBase = this.getWritableDatabase(); 
      openDataBase(); 

      ContentValues values = new ContentValues(); 
      values.put("ResimNo", model.getResim_No().toString()); 
      values.put("KasaYeri", model.getKasa_Yeri().toString()); 
      values.put("ArabaBolmeYeri", model.getAraba_Bolme_Yeri().toString()); 
      myDataBase.insertOrThrow("db4OptimumOptimumSiraliRota", null, values); 


      myDataBase.close(); 

MainActivity類別

public class MainActivity extends AppCompatActivity implements OnClickListener { 

    Button bSorgula; 
    String resimno= ""; 
    String kasayeri = ""; 
    String arababolmeyeri = ""; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     bSorgula = (Button) findViewById(R.id.bSorgula); 
     bSorgula.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View v) { 
     new myAsyncTask("Yükleniyor").execute(); 
    } 

    private class myAsyncTask extends AsyncTask<Void, Void, Void> { 

     String modalMesaj; 
     ProgressDialog dialog; 

     JSONObject jsonObject = null; 

     public myAsyncTask(String mMesaj) { 
      this.modalMesaj = mMesaj; 
      this.dialog = new ProgressDialog(MainActivity.this); 
     } 

     @Override 
     protected void onPreExecute() { 
      dialog.setMessage(modalMesaj); 
      dialog.setIndeterminate(true); 
      dialog.setCancelable(false); 
      dialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 



      String url = "http://192.168.163.1:8097/Products.aspx"; 

      HttpClient httpclient = new DefaultHttpClient(); 

      HttpGet httpget = new HttpGet(url); 

      HttpResponse response; 
      try { 
       response = httpclient.execute(httpget); 

       HttpEntity entity = response.getEntity(); 

       if (entity != null) { 
        InputStream instream = entity.getContent(); 
        String result = convertStreamToString(instream); 

        JSONArray arr = new JSONArray(result); 
        List<String> Liste_Model = new ArrayList<String>(); 
        DatabaseHelper databaseHelper = new DatabaseHelper(MainActivity.this); 
        for(int i = 0; i < arr.length(); i++){ 
         Liste_Model.add(arr.getJSONObject(i).getString("ResimNo")); 
         Liste_Model.add(arr.getJSONObject(i).getString("KasaYeri")); 
         Liste_Model.add(arr.getJSONObject(i).getString("ArabaBolmeYeri")); 

         Liste_Model model = new Liste_Model(); 

         try { 
          databaseHelper.createDataBase(); 
          model.setResim_No(arr.getJSONObject(i).getString("ResimNo")); 
          model.setKasa_Yeri(arr.getJSONObject(i).getString("KasaYeri")); 
          model.setAraba_Bolme_Yeri(arr.getJSONObject(i).getString("ArabaBolmeYeri")); 

          databaseHelper.add_SiraliListe(model); 
         } catch (IOException e) { 
          e.printStackTrace(); 

         } 
        } 



        instream.close(); 
       } 

      } catch (ClientProtocolException e) { 
       Mesaj(e.getMessage()); 
      } catch (IOException e) { 
       Mesaj(e.getMessage()); 
      } catch (JSONException e) { 
       Mesaj(e.getMessage()); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void str) { 

      if (dialog.isShowing()) 
       dialog.dismiss(); 


     } 
    } 

    private static String convertStreamToString(InputStream is) { 

     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 

     String line ; 
     try { 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       is.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return sb.toString(); 
    } 

    private void Mesaj(String s) { 

     Toast.makeText(this, s, Toast.LENGTH_LONG).show(); 
    } 

} 

清單當然模型類

public class Liste_Model { 
    private String Resim_No; 
    private String Kasa_Yeri; 
    private String Araba_Bolme_Yeri; 

    public String getResim_No() { 
     return Resim_No; 
    } 

    public void setResim_No(String resim_No) { 
     Resim_No = resim_No; 
    } 

    public String getKasa_Yeri() { 
     return Kasa_Yeri; 
    } 

    public void setKasa_Yeri(String kasa_Yeri) { 
     Kasa_Yeri = kasa_Yeri; 
    } 

    public String getAraba_Bolme_Yeri() { 
     return Araba_Bolme_Yeri; 
    } 

    public void setAraba_Bolme_Yeri(String araba_Bolme_Yeri) { 
     Araba_Bolme_Yeri = araba_Bolme_Yeri; 
    } 
} 
+0

解釋你的代碼會有很大幫助。 – Bagata

回答

1

爲什麼你手動創建路徑,你的數據庫?您應該使用您的DatabaseHelper的getWritableDatabase()getReadableDatabase()方法,如official manual中所述。並寫出更詳細的信息爲什麼你認爲它沒有放入數據庫,也許你只是不能正確讀取它?有沒有錯誤或崩潰?但首先嚐試重寫你的代碼,因爲它是在官方文檔中給出的。

+0

我們正在爲Sony-Smart EyeGlass開發一款應用程序,如果我們像使用Manuel數據庫一樣,我們總是必須一次又一次地運行android studio。但我們不想一直刷新android studio。因爲,我們將在工業操作中使用玻璃。其實,我們可以直接獲取數據的ip地址服務器到android studio嗎?我認爲它可以幫助我們。 –

+0

@TuğçeAcar,我不明白是什麼問題呢?你從你的IP地址獲得Json數組。那麼你只需要解析這個Json。使用本手冊如何使用[JsonReader類](https://developer.android.com/reference/android/util/JsonReader.html)執行此操作。 希望這就是您要找的。請注意,JsonArray被[]包圍,但Json Object被{}包圍。實際上,您可以處理所有數據而不將其保存到數據庫中。只需解析(讀取)json並執行所需的任何操作。您也可以將數據保存在某個ArrayList中

+0

是的,您是對的。我將在玻璃屏幕上顯示數據而不保存。謝謝。 –

相關問題