2013-08-30 3 views
1

Я создал SD-карту и внутри которой хранился файл db UPData.db. Внутри этого db я создал имя таблицы Customer, но не получил результат. Отображается NullPointerException в DBList. Пожалуйста, помогите мне выполнить это, следуя той же структуре?Не удалось получить доступ к db-файлу из sdcard

activity_up.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".UP" 
    android:orientation="vertical"> 
    <LinearLayout android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="UserName" /> 
    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="UserName" 
     android:id="@+id/un"/> 
    </LinearLayout> 
    <LinearLayout android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="PassWord" /> 
    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="PassWord" 
     android:id="@+id/pw" /> 
    </LinearLayout> 
    <Button android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:text="Submit" 
     android:id="@+id/submit"/> 

</LinearLayout> 

Рез/макет/list.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".UP" 
    > 
    <ListView 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:id="@+id/listview"></ListView> 

</LinearLayout> 

viewholder.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".UP" 
    android:orientation="vertical"> 
    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:id="@+id/tvid"/> 
    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:id="@+id/tvname"/> 
    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:id="@+id/tvaddress"/> 
    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:id="@+id/tvphone"/> 

</LinearLayout> 


**manifest.xml** 

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.up" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" 
     android:name="Main"> 
     <activity 
      android:name="com.example.up.UP" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="ShowList"></activity> 
    </application> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
</manifest> 


**UP.java** 

package com.example.up; 
public class UP extends Activity { 
    EditText un,pw; 
    Button submit; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_up); 
     un=(EditText)findViewById(R.id.un); 
     pw=(EditText)findViewById(R.id.pw); 
     submit=(Button)findViewById(R.id.submit); 

     submit.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       String user=un.getText().toString(); 
       String pwd=pw.getText().toString(); 
       System.out.println("user--"+user +"&&"+"Password is--"+pwd); 
       Intent showlist=new Intent(UP.this,ShowList.class); 
       startActivity(showlist); 

      } 
     }); 
    } 


} 

**ShowList.java** 

package com.example.up; 
public class ShowList extends Activity { 
    ListView list; 
    ArrayList<ListData> alist; 
    ArrayList<ListData> achildlist; 
    ArrayAdapter<String> adapter; 
    int id=-1; 
    Cursor cur=null; 
    ListData listdata; 
    DBHelper help; 
    DBList dblist; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.list); 
     list=(ListView)findViewById(R.id.listview); 

     loadData(); 

    } 
    public void loadData(){ 
     try{ 
      alist=new ArrayList<ShowList.ListData>(); 
      dblist=new DBList(this); 
      cur=dblist.getListData(this); 

      if(cur!=null){ 
       if(cur.moveToFirst()){ 
        do{ 
         listdata=new ListData(); 
         listdata.setCustomerId(cur.getInt(cur.getColumnIndex("customerId"))); 
         listdata.setCustomerName(cur.getString(cur.getColumnIndex("customerName"))); 
         listdata.setCustomerName(cur.getString(cur.getColumnIndex("customerAddress"))); 
         listdata.setCustomerId(cur.getInt(cur.getColumnIndex("phone"))); 

         String id=Integer.toString(cur.getInt(cur.getColumnIndex("customerId"))); 
         System.out.println(id); 

         alist.add(listdata); 
        }while(cur.moveToNext()); 
       } 
       cur.close(); 
      } 
      list.setAdapter(new ListDataAdapter(this,alist)); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 


    class ListDataAdapter extends BaseAdapter{ 

     Context con; 
     ListDataAdapter(Context c,ArrayList<ListData> listadapter){ 
      this.con=c; 
      achildlist=listadapter; 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return achildlist.size(); 
     } 

     @Override 
     public Object getItem(int arg0) { 
      // TODO Auto-generated method stub 
      return achildlist.get(arg0); 
     } 

     @Override 
     public long getItemId(int arg0) { 
      // TODO Auto-generated method stub 
      return arg0; 
     } 

     @Override 
     public View getView(int arg0, View arg1, ViewGroup arg2) { 
      // TODO Auto-generated method stub 
      ViewHolder obj=null; 
      try{ 
       if(arg1==null){ 
      obj=new ViewHolder(); 
      LayoutInflater vi=(LayoutInflater)getSystemService(Context.LOCATION_SERVICE); 
      arg1=vi.inflate(R.layout.viewholder, null); 
      obj.tvid=(TextView)arg1.findViewById(R.id.tvid); 
      obj.tvname=(TextView)arg1.findViewById(R.id.tvname); 
      obj.tvaddress=(TextView)arg1.findViewById(R.id.tvaddress); 
      obj.tvphone=(TextView)arg1.findViewById(R.id.tvphone); 
      arg1.setTag(obj); 
       }else{ 
        obj=(ViewHolder)arg1.getTag(); 
       } 
       if(obj!=null){ 
        ListData listdata=achildlist.get(arg0); 
        obj.tvid.setText(listdata.getCustomerId()); 
        obj.tvname.setText(listdata.getCustomerName()); 
        obj.tvaddress.setText(listdata.getCustomerAddress()); 
        obj.tvphone.setText(listdata.getPhone()); 
       } 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
      return arg1; 

     } 

    } 
    class ViewHolder { 
     TextView tvid; 
     TextView tvname; 
     TextView tvaddress; 
     TextView tvphone; 
    } 
    class ListData{ 
     int customerId; 
     String customerName; 
     String customerAddress; 
     int phone; 

     public int getCustomerId() { 
      return customerId; 
     } 
     public void setCustomerId(int customerId) { 
      this.customerId = customerId; 
     } 
     public String getCustomerName() { 
      return customerName; 
     } 
     public void setCustomerName(String customerName) { 
      this.customerName = customerName; 
     } 
     public String getCustomerAddress() { 
      return customerAddress; 
     } 
     public void setCustomerAddress(String customerAddress) { 
      this.customerAddress = customerAddress; 
     } 
     public int getPhone() { 
      return phone; 
     } 
     public void setPhone(int phone) { 
      this.phone = phone; 
     } 

    } 

} 

**Main.java** 

package com.example.up;  
public class Main extends Application { 

     public DBHelper adapter; 

} 

**DBHelper.java** 

package com.example.up; 
public class DBHelper{ 
    public static final int version = 1; 
    public String DBName = "/sdcard/UPData.db"; 
    private SQLiteDatabase dbSqlite; 
    private Context c; 
    public SQHelper openhelper; 

    //public static final String PATH_APPLICATION = "/Android/Data/com.example.up/files/"; 
    //public static final String FOLDER_LOGS = "Logs/"; 
    //public static final String LOG_FILE_NAME = "ErrorLog.txt"; 


    public DBHelper(Context context){ 
     c=context; 
     openhelper=new SQHelper(c, DBName, null, version); 
    } 


    public class SQHelper extends SQLiteOpenHelper{ 

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

     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 

      try{ 
       System.out.println("inside oncreate of dbhelper+++++++++"); 
       File sdcard = Environment.getExternalStorageDirectory(); 
        File f = new File(sdcard,"UPData.db"); 
        if(!f.exists()){ 
         f.createNewFile(); 
        } 

        BufferedReader buf = new BufferedReader(new FileReader(f)); 
        String readString = new String(); 
        while((readString = buf.readLine())!= null){ 

         Log.d("oncreate of DBHelper in UP..........", readString); 
        } 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e){ 
        e.printStackTrace(); 
       } 
      // TODO Auto-generated method stub 
      /*try { 


       if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 

        String strDirPath = Environment.getExternalStorageDirectory().getPath() + PATH_APPLICATION + FOLDER_LOGS; 
        File dirLog = new File(strDirPath); 
        if (!dirLog.isDirectory() || !dirLog.exists()) { 
         dirLog.mkdirs(); 
        } 
        //String strLogFile = "Logs_" + CommonMethods.getCurrentDateTime(Values.DATE_FORMAT) + ".txt"; 
        String strLogFile = LOG_FILE_NAME; 
        File fileLog = new File(dirLog, strLogFile); 
        if (!fileLog.exists()) { 
         fileLog.createNewFile(); 
        } 

        FileWriter fileWrite = new FileWriter(fileLog, true); 

        BufferedWriter bufWriter = new BufferedWriter(fileWrite); 

        //String strLog = CommonMethods.getCurrentDateTime(Values.DATE_TIME_2_FORMAT) + " ERROR : " + strModule + "\t" + strLogData + " ; " + "\r\n"; 
        //bufWriter.write(strLog); 
        bufWriter.close(); 
        fileWrite.close(); 

       } 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      }*/ 

     } 

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

     } 

    } 
    public void close() { 
     try { 
      dbSqlite.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public void open() throws SQLiteException { 
     try { 

      dbSqlite = openhelper.getWritableDatabase(); 

     } catch (SQLiteException e) { 
      dbSqlite = openhelper.getReadableDatabase(); 
      e.printStackTrace(); 
     } 
    } 

    public Cursor getRecordsWithRawQuery(String strSql, String[] sArrSelectionArgs) { 
     Cursor cursor = null; 
     try { 

      cursor = dbSqlite.rawQuery(strSql, sArrSelectionArgs); 
     } catch (SQLiteException e) { 
      e.printStackTrace(); 
     } 
     return cursor; 
    } 

    public void executeNonQuery(String strQuery) { 
     try { 
      dbSqlite.execSQL(strQuery); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 


} 

// Этот Java класс (DBList) Я получаю нулевой указатель excetion. в какой части я должен написать код для чтения таблицы из sdcard. Или это требуется или нет!

DBList.java

package com.example.up; 
public class DBList { 

    private int customerId; 
    private String customerName; 
    private String customerAddress; 
    private int phone; 

    Context context; 
    Main maincall; 
    SQLiteDatabase db; 





    public DBList(Context con){ 
     this.context=con; 
     maincall=(Main)context.getApplicationContext(); 
    } 

    public Cursor getListData(Context context){ 
     Cursor cur=null; 
     try{ 

      //String query="Select customerId,customerName,customerAddress,phone from Customer where customerId="+id; 
      String query="Select customerId,customerName,customerAddress,phone from Customer"; 
      Main maincall=(Main)context.getApplicationContext(); 
      cur=maincall.adapter.getRecordsWithRawQuery(query, null); 

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

      return cur; 
    } 
    public void insert(){ 
     try{ 
      String query="Insert into Customer(customerId,customerName,customerAddress,phone) Values" +"("+customerId+","+customerName+","+customerAddress+","+phone+")"; 
      maincall.adapter.executeNonQuery(query); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    public int getCustomerId() { 
     return customerId; 
    } 

    public void setCustomerId(int customerId) { 
     this.customerId = customerId; 
    } 

    public String getCustomerName() { 
     return customerName; 
    } 
    public void setCustomerName(String customerName) { 
     this.customerName = customerName; 
    } 
    public String getCustomerAddress() { 
     return customerAddress; 
    } 
    public void setCustomerAddress(String customerAddress) { 
     this.customerAddress = customerAddress; 
    } 
    public int getPhone() { 
     return phone; 
    } 
    public void setPhone(int phone) { 
     this.phone = phone; 
    } 

} 
+0

Учитывая разрешение в манифесте ?? –

+1

Пожалуйста, у вас лодка? –

ответ

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