2016-08-18 2 views
-1

웹 서비스가있는 응용 프로그램을 만들었습니다. 우리의 데이터 유형은 json입니다. 그리고 안드로이드 애플 리케이션은 IP 주소 서버에서 데이터를 얻을 수 있습니다. 하지만 그들은 데이터베이스에 나타나지 않습니다. 어떻게 해결할 수 있을까요? 우리의 코드는 아래와 같습니다. 데이터베이스에내 안드로이드 애플 리케이션의 기존 데이터베이스에 데이터를 추가하는 방법은 무엇입니까?

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

} 

Liste 모델 클래스

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를 반복해서 실행해야합니다. 그러나 우리는 항상 안드로이드 스튜디오를 새로 고침하고 싶지 않습니다. 왜냐하면, 우리는 산업 공정에서 유리를 사용할 것입니다. 실제로, 우리는 안드로이드 스튜디오 서버에 직접 IP 주소를 얻을 수 있습니까? 나는 그것이 우리를 도울 수 있다고 생각합니다. –

+0

@ TuğçeAcar, 나는 그 때 문제가 무엇인지 이해하지 못합니까? IP 주소에서 Json Array를 얻습니다. 그럼이 Json을 파싱해야합니다. 이 설명서를 [JsonReader class] (https://developer.android.com/reference/android/util/JsonReader.html) 으로 찾는 방법을 찾으십시오. 그리고 JsonArray는 []로 둘러싸여 있지만 Json Object는 {}로 둘러싸여 있습니다. 실제로 모든 데이터를 데이터베이스에 저장하지 않고 처리 할 수 ​​있습니다. json을 구문 분석 (읽기)하고 필요한 작업을 수행하십시오. 일부 ArrayList에 데이터를 저장할 수도 있습니다.

+0

네가 맞습니다. 저장하지 않고 유리 화면에 데이터를 보여 드리겠습니다. 감사합니다. –

관련 문제