2013-05-04 103 views
0

我想存儲一些數據到SQLite數據庫。但我不能那樣做。它給一些錯誤。這是我的代碼,請幫我解決這個問題。Json數據存儲在Android中的SQLite

public class AndroidJSONParsingActivity extends ListActivity { 

// url to make request 
private static String url = "http://api.androidhive.info/contacts/"; 

// JSON Node names 
private static final String TAG_CONTACTS = "contacts"; 
private static final String TAG_ID = "id"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_EMAIL = "email"; 
private static final String TAG_ADDRESS = "address"; 
private static final String TAG_GENDER = "gender"; 
private static final String TAG_PHONE = "phone"; 
private static final String TAG_PHONE_MOBILE = "mobile"; 
private static final String TAG_PHONE_HOME = "home"; 
private static final String TAG_PHONE_OFFICE = "office"; 

// contacts JSONArray 
JSONArray contacts = null; 

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

    // Hashmap for ListView 
    ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); 

    // Creating JSON Parser instance 
    JSONParser jParser = new JSONParser(); 

    // getting JSON string from URL 
    JSONObject json = jParser.getJSONFromUrl(url); 

    try { 
     // Getting Array of Contacts 
     contacts = json.getJSONArray(TAG_CONTACTS); 

     // looping through All Contacts 
     for (int i = 0; i < contacts.length(); i++) { 
      JSONObject c = contacts.getJSONObject(i); 

      // Storing each json item in variable 
      String id = c.getString(TAG_ID); 
      String name = c.getString(TAG_NAME); 
      String email = c.getString(TAG_EMAIL); 
      String address = c.getString(TAG_ADDRESS); 
      String gender = c.getString(TAG_GENDER); 

      // Phone number is agin JSON Object 
      JSONObject phone = c.getJSONObject(TAG_PHONE); 
      String mobile = phone.getString(TAG_PHONE_MOBILE); 
      String home = phone.getString(TAG_PHONE_HOME); 
      String office = phone.getString(TAG_PHONE_OFFICE); 

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

      // adding each child node to HashMap key => value 
      map.put(TAG_ID, id); 
      map.put(TAG_NAME, name); 
      map.put(TAG_EMAIL, email); 
      map.put(TAG_PHONE_MOBILE, mobile); 

      // adding HashList to ArrayList 
      contactList.add(map); 
      // DataBase Edits 
      Button add = (Button) findViewById(R.id.button1); 

      add.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        String sqlName = name; 
        String sqlEmail = email; 
        String sqlMobile = mobile; 
        SQLHandler entry = new SQLHandler(
          AndroidJSONParsingActivity.this); 
        entry.open(); 
        entry.createEntry(sqlName, sqlEmail, sqlMobile); 
        entry.close(); 
       } 
      }); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 

    } 

    /** 
    * Updating parsed JSON data into ListView 
    * */ 
    ListAdapter adapter = new SimpleAdapter(this, contactList, 
      R.layout.list_item, new String[] { TAG_NAME, TAG_EMAIL, 
        TAG_PHONE_MOBILE }, new int[] { R.id.name, R.id.email, 
        R.id.mobile }); 

    setListAdapter(adapter); 

    // selecting single ListView item 
    ListView lv = getListView(); 

    // Launching new screen on Selecting Single ListItem 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // getting values from selected ListItem 
      String name = ((TextView) view.findViewById(R.id.name)) 
        .getText().toString(); 
      String cost = ((TextView) view.findViewById(R.id.email)) 
        .getText().toString(); 
      String description = ((TextView) view.findViewById(R.id.mobile)) 
        .getText().toString(); 

      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), 
        SingleMenuItemActivity.class); 
      in.putExtra(TAG_NAME, name); 
      in.putExtra(TAG_EMAIL, cost); 
      in.putExtra(TAG_PHONE_MOBILE, description); 
      startActivity(in); 

     } 
    }); 

} 

}

這裏是SQLOpenHelper類

public class SQLHandler { 

public static final String KEY_ROWID = "_id"; 
public static final String KEY_NAME = "name"; 
public static final String KEY_EMAIL = "email"; 
public static final String KEY_MOBILE = "mobile"; 

private static final String DATABASE_NAME = "Details"; 
private static final String DATABASE_TABLE = "TopDetails"; 
private static final int DATABASE_VERSION = 1; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDataBase; 

private static class DbHelper extends SQLiteOpenHelper { 

    public DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME 
       + " TEXT NOT NULL, " + KEY_EMAIL + " TEXT NOT NULL, " 
       + KEY_MOBILE + " TEXT NOT NULL);"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 
    } 
} 

public SQLHandler(Context c) { 
    ourContext = c; 
} 

public SQLHandler open() throws SQLException { 
    ourHelper = new DbHelper(ourContext); 
    ourDataBase = ourHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    // TODO Auto-generated method stub 
    ourHelper.close(); 
} 

public void createEntry(String name, String email, String mobile) { 
    // TODO Auto-generated method stub 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME, name); 
    cv.put(KEY_EMAIL, email); 
    cv.put(KEY_MOBILE, mobile); 
    ourDataBase.insert(DATABASE_TABLE, null, cv); 
    } 
} 

和JSON解析器

public class JSONParser { 
static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 

// constructor 
public JSONParser() { 

} 

public JSONObject getJSONFromUrl(String url) { 

    // Making HTTP request 
    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent();   

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     json = sb.toString(); 
    } catch (Exception e) { 
     Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 

    // try parse the string to a JSON object 
    try { 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    // return JSON String 
    return jObj; 

    } 
} 

而且這是一個菜單項活動

public class SingleMenuItemActivity extends Activity { 

// JSON node keys 
private static final String TAG_NAME = "name"; 
private static final String TAG_EMAIL = "email"; 
private static final String TAG_PHONE_MOBILE = "mobile"; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.single_list_item); 

    // getting intent data 
    Intent in = getIntent(); 

    // Get JSON values from previous intent 
    String name = in.getStringExtra(TAG_NAME); 
    String cost = in.getStringExtra(TAG_EMAIL); 
    String description = in.getStringExtra(TAG_PHONE_MOBILE); 

    // Displaying all values on the screen 
     TextView lblName = (TextView) findViewById(R.id.name_label); 
     TextView lblCost = (TextView) findViewById(R.id.email_label); 
     TextView lblDesc = (TextView) findViewById(R.id.mobile_label); 

     lblName.setText(name); 
    lblCost.setText(cost); 
    lblDesc.setText(description); 


    } 
} 

謝謝。請幫我解決這個問題。

+0

有些錯誤?這是什麼? – 2013-05-04 07:33:37

+1

什麼是錯誤?發佈您的logcat跟蹤 – Pragnani 2013-05-04 07:34:19

+0

什麼是問題? – Daryn 2013-05-04 08:17:37

回答

0

您已經在主要活動中初始化類助手。

相關問題