2013-12-06 3 views
0

Была возможность читать/записывать другую активность с различным именем адаптера и базы данных. Протестируйте скопированную копию и отредактируйте соответственно. Однако была получена некоторая ошибка, такая как блокировка базы данных.NullException. Заблокирована база данных

Encounter.java

package com.example.medilearner; 

import java.util.ArrayList; 
import java.util.HashMap; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import com.medilearner.database.JSONParser; 
import com.medilearner.database.encounterDbAdapter; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 






public class EncounterActivity extends Activity { 
    ListView list; 
    TextView eid; 
    TextView eclerkship; 
    TextView ename; 
    TextView etype; 
    TextView erequiredattempts; 


    // DATABASE ADAPTOR 
    encounterDbAdapter patientDB; 
    Context myContext; 

    Button Btngetdata; 
    ArrayList<HashMap<String, String>> encouterlist = new ArrayList<HashMap<String, String>>(); 

    //URL to get JSON Array 
    private static String url = URL; 

    //JSON Node Names 
    private static final String TAG_ENCOUNTERS = "encounters"; 
    private static final String TAG_E_ID = "e_id"; 
    private static final String TAG_E_CLERKSHIP = "clerkship"; 
    private static final String TAG_E_NAME = "encounter_name"; 
    private static final String TAG_E_TYPE = "type"; 
    private static final String TAG_E_REQUIRED_ATTEMPTS = "required_attempts"; 

    JSONArray android = null; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_encounter); 
     encouterlist = new ArrayList<HashMap<String, String>>(); 

       new JSONParse().execute(); 
    } 

    private class JSONParse extends AsyncTask<String, String, JSONObject> { 
     private ProgressDialog pDialog; 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      eid = (TextView)findViewById(R.id.eid); 
      eclerkship = (TextView)findViewById(R.id.eclerkship); 
      ename = (TextView)findViewById(R.id.ename); 
      etype = (TextView)findViewById(R.id.etype); 
      erequiredattempts = (TextView)findViewById(R.id.erequiredattempts); 
      pDialog = new ProgressDialog(EncounterActivity.this); 
      pDialog.setMessage("Getting Data ..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 



     } 

     @Override 
     protected JSONObject doInBackground(String... args) { 



      JSONParser jParser = new JSONParser(); 

      // Getting JSON from URL 
      JSONObject json = jParser.getJSONFromUrl(url); 
      return json; 
     } 
     @Override 
     protected void onPostExecute(JSONObject json) { 
      pDialog.dismiss(); 
      try { 
        // Getting JSON Array from URL 
        android = json.getJSONArray(TAG_ENCOUNTERS); 
        for(int i = 0; i < android.length(); i++){ 
        JSONObject c = android.getJSONObject(i); 

        // Storing JSON item in a Variable 
        String eid = c.getString(TAG_E_ID); 
        String eclerkship = c.getString(TAG_E_CLERKSHIP); 
        String ename = c.getString(TAG_E_NAME); 
        String etype = c.getString(TAG_E_TYPE);  
        String erequiredattempts = c.getString(TAG_E_REQUIRED_ATTEMPTS); 


        // Opening of database 
        patientDB = new encounterDbAdapter(myContext); 
        patientDB.open(); 
        // Adding value HashMap key => value 
        patientDB.close(); 

        HashMap<String, String> map = new HashMap<String, String>(); 

        map.put(TAG_E_ID, eid); 
        map.put(TAG_E_CLERKSHIP, eclerkship); 
        map.put(TAG_E_NAME, ename); 
        map.put(TAG_E_TYPE, etype); 
        map.put(TAG_E_REQUIRED_ATTEMPTS, erequiredattempts); 

        encouterlist.add(map); 
        list=(ListView)findViewById(R.id.list);  



        ListAdapter adapter = new SimpleAdapter(EncounterActivity.this, encouterlist, 
          R.layout.list_v, 
          new String[] { TAG_E_ID, TAG_E_CLERKSHIP, TAG_E_NAME, TAG_E_TYPE, TAG_E_REQUIRED_ATTEMPTS }, new int[] { 
            R.id.eid, R.id.eclerkship, R.id.ename, R.id.etype, R.id.erequiredattempts}); 

        list.setAdapter(adapter); 
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

         @Override 
         public void onItemClick(AdapterView<?> parent, View view, 
               int position, long id) { 
          Toast.makeText(EncounterActivity.this, "You Clicked at "+encouterlist.get(+position).get("type"), Toast.LENGTH_SHORT).show(); 

         } 
        }); 

        } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 


     } 
    } 

} 

EncounterDbAdapter.java

package com.medilearner.database; 

import java.util.ArrayList; 
import java.util.Locale; 

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.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class encounterDbAdapter { 

    private static final String DATABASE_NAME = "encounter.db"; 
    private static final String DATABASE_TABLE = "encounterDb"; 
    private static final int DATABASE_VERSION = 2; 
    private SQLiteDatabase _db; 
    private final Context encounterContext; 



    public static final String KEY_ID = "_id"; 
    public static final int COLUMN_KEY_ID = 0; 


    public static final String ENCOUNTER_ID = "entry_initial"; 
    public static final int COLUMN_INITIAL_ID = 1; 
    public static final String CLERKSHIP = "entry_date"; 
    public static final int COLUMN_DATE_ID = 2; 
    public static final String ENCOUNTER_NAME = "entry_sitelocation"; 
    public static final int COLUMN_SITE_ID = 3; 
    public static final String TYPE = "entry_clinic"; 
    public static final int COLUMN_WARD_ID = 4; 
    public static final String REQUIRED_ATTEMPTS = "entry_history"; 
    public static final int COLUMN_HISTORY_ID = 5; 

    protected static final String DATABASE_CREATE = "create table " 
      + DATABASE_TABLE + " (" + KEY_ID 
      + " integer primary key autoincrement, " + ENCOUNTER_ID + " Text, " 
      + CLERKSHIP + " text not null, " + ENCOUNTER_NAME + " Text, " 
      + TYPE + " Text, " + REQUIRED_ATTEMPTS + " Text);"; 

    private String encounterDBADAPTER_LOG_CAT = "MY_LOG"; 

    private myencounterDBOpenHelper EncounterdbHelper; 

    public encounterDbAdapter(Context _context) { 

     this.encounterContext = _context; 
     EncounterdbHelper = new myencounterDBOpenHelper(encounterContext, DATABASE_NAME, null, 
       DATABASE_VERSION); 
     _db=EncounterdbHelper.getWritableDatabase(); 

    } 

    public void close() { 
      this._db.close(); 
      Log.w(encounterDBADAPTER_LOG_CAT, "DB closed"); 
    } 

    public void open() throws SQLiteException { 
     try{ 
      _db=EncounterdbHelper.getWritableDatabase(); 
      Log.w(encounterDBADAPTER_LOG_CAT, "DB opened as writable database"); 

     }catch(SQLiteException ex){ 
      _db=EncounterdbHelper.getReadableDatabase(); 
      Log.w(encounterDBADAPTER_LOG_CAT, "DB opened as readable database"); 
     } 
    } 
//insertion 
    public long insertEncounterEntry(String eID, String clerkship, String encounterName, String type, String requiredAttempts) { 

     //insert new task 
     ContentValues newEntryValues=new ContentValues(); 
     newEntryValues.put(ENCOUNTER_ID,eID); 
     newEntryValues.put(CLERKSHIP,clerkship); 
     newEntryValues.put(ENCOUNTER_NAME,encounterName); 
     newEntryValues.put(TYPE,type); 
     newEntryValues.put(REQUIRED_ATTEMPTS,requiredAttempts); 

     //Insert the row 
     Log.w(encounterDBADAPTER_LOG_CAT, "Inserted EntryInitial="+eID+" EntryDateOfDiagnosis="+clerkship + "Inserted EntrySiteLocation="+encounterName + "Inserted EntryWardClinic="+type + "Inserted entryPerformedHistory="+requiredAttempts +"into table"+DATABASE_TABLE); 

      long Integer = _db.insert(DATABASE_TABLE, null, newEntryValues); 
      Log.w(encounterDBADAPTER_LOG_CAT, "ID:" + Integer); 
      return Integer; 
    } 

//removal 
    public boolean removeEntry(long _rowIndex) { 

     if(_db.delete(DATABASE_TABLE, KEY_ID+"="+_rowIndex, null)<=0) 
     { 
      Log.w(encounterDBADAPTER_LOG_CAT,"Removing Entrying where id="+_rowIndex+"Failed"); 
      return false; 
     } 
     Log.w(encounterDBADAPTER_LOG_CAT,"Removing Entrying where id="+_rowIndex+"Success"); 
     return true; 

    } 

    //updating 
    public boolean updateEntry(long _rowIndex,String entryInitial, String entryDateOfDiagnosis, String entrySiteLocation, String entryWardClinic, String entryPerformedHistory, String entryPerformedPhysical) { 

     return false; 
    } 

    //retrival 


     public Cursor retrieveAllPatientEntriesCursor() 
     { 
      Cursor localCursor=null; 
      try 
     { 
//    
     localCursor = this._db.query("mediLearnerDb", null, null, null, null, null, null); 

//  localCursor = this._db.query("mediLearnerDb", new String[] { "entry_initial"}, null, null, null, null, null).getString(1); 
//  test = this._db.query("mediLearnerDb", new String[] { "entry_initial"}, null, null, null, null, null).getString(1); 
     } 
     catch (SQLException localSQLException) 
     { 
      Log.w(this.encounterDBADAPTER_LOG_CAT, "Retrieve fail! "); 
     } 
//  return null; 
      return localCursor; 
     } 


    public class myencounterDBOpenHelper extends SQLiteOpenHelper { 

     public myencounterDBOpenHelper(Context context, String name, 
       CursorFactory factory, int version) { 
      super(context, name, factory, version); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      db.execSQL(DATABASE_CREATE); 
      Log.w(encounterDBADAPTER_LOG_CAT, "Helper : DB " + DATABASE_TABLE 
        + " Created!!"); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 

     } 

    } // End of myDBOpenHelper 

     private void filter(String paramString) 
     { 
      paramString.toLowerCase(Locale.getDefault()); 
     } 
}// End of myDBAdapter 

LogCat

12-06 17:30:58.036: D/dalvikvm(14495): GC_FOR_ALLOC freed 16K, 11% free 12207K/13703K, paused 14ms, total 16ms 
12-06 17:30:58.116: W/ResourceType(14495): Failure getting entry for 0x010802c1 (t=7 e=705) in package 0 (error -75) 
12-06 17:30:58.161: W/ResourceType(14495): Failure getting entry for 0x010802c1 (t=7 e=705) in package 0 (error -75) 
12-06 17:30:58.161: W/ResourceType(14495): Failure getting entry for 0x010802c1 (t=7 e=705) in package 0 (error -75) 
12-06 17:30:58.166: D/dalvikvm(14495): GC_CONCURRENT freed 236K, 12% free 12860K/14471K, paused 12ms+18ms, total 45ms 
12-06 17:30:58.196: E/SpannableStringBuilder(14495): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
12-06 17:30:58.196: E/SpannableStringBuilder(14495): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
12-06 17:30:59.041: D/AbsListView(14495): Get MotionRecognitionManager 
12-06 17:30:59.061: W/ResourceType(14495): Failure getting entry for 0x010802c1 (t=7 e=705) in package 0 (error -75) 
12-06 17:31:02.786: D/AndroidRuntime(14495): Shutting down VM 
12-06 17:31:02.786: W/dalvikvm(14495): threadid=1: thread exiting with uncaught exception (group=0x41bc42a0) 
12-06 17:31:02.786: E/AndroidRuntime(14495): FATAL EXCEPTION: main 
12-06 17:31:02.786: E/AndroidRuntime(14495): java.lang.NullPointerException 
12-06 17:31:02.786: E/AndroidRuntime(14495): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at com.medilearner.database.encounterDbAdapter.<init>(encounterDbAdapter.java:57) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at com.example.medilearner.EncounterActivity$JSONParse.onPostExecute(EncounterActivity.java:123) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at com.example.medilearner.EncounterActivity$JSONParse.onPostExecute(EncounterActivity.java:1) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at android.os.AsyncTask.finish(AsyncTask.java:631) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at android.os.Looper.loop(Looper.java:137) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at android.app.ActivityThread.main(ActivityThread.java:4921) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at java.lang.reflect.Method.invokeNative(Native Method) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at java.lang.reflect.Method.invoke(Method.java:511) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
12-06 17:31:02.786: E/AndroidRuntime(14495): at dalvik.system.NativeStart.main(Native Method) 
+0

Проверьте свою линию 123 в EncounterActivity.java. –

+0

Проверьте мой ответ. –

+0

Вы можете улучшить качество своих вопросов, понимая это: http://sscce.org. –

ответ

2

Я предполагаю, что ваш контекст является пустым.

Здесь: patientDB = new encounterDbAdapter(myContext);

Решение: patientDB = new encounterDbAdapter(EncounterActivity.this);

Надеется, что это помогает.

+0

Удивительно! Благодаря! – Walalala

+0

Ваш всегда приветствуется .. :) –

Смежные вопросы