2016-07-27 1 views
1

Здравствуйте, Techie :) Я новичок в android. Я разрабатываю одно приложение, в котором пользователь регистрируется со всеми личными подробностями и подробностями мобильного устройства и после входа в систему пользователя все работает нормально и встречается с результатом, но когда я перехожу к разделу admin здесь у меня проблема, и я не понимая этого.Как добавить строку динамически в макет таблицы или Как показать полные записи db в одной таблице Макет

Части секции администратора, где я застрял: - 1) после того, как администратор входа, все записи в таблице должны быть показаны в одном макете таблицы здесь и можно сказать, что я хочу, чтобы заполнить все записи таблицы в таблице Layout.

Я пытаюсь указать конкретное имя пользователя и его отображение в макете таблицы, но это не мое требование, я должен показать всех пользователей в макете таблицы.

Я делюсь своим кодом здесь, будет ли все предлагать мне, что делать дальше и как я могу достичь своего требования. Спасибо за ваше драгоценное время :)

//MainActivity.java

package com.example.yadapras.mobiltyemp; 
import android.content.Context; 
import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.VectorEnabledTintResources; import android.telephony.TelephonyManager; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; 

    /** * Created by yadapras on 6/26/2016. */ public class MainActivity extends AppCompatActivity { 


     EditText a,b; 
     String usr,pass; 
     DatabaseHelper helper = new DatabaseHelper(this); 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

     } 

     public void onButtonClick(View v) 
     { 
      if (v.getId() == R.id.BLogin) 
      { 
       a = (EditText)findViewById(R.id.userName); 
       usr = a.getText().toString(); 
       b = (EditText)findViewById(R.id.userPassword); 
       pass = b.getText().toString(); 



       String password = null; 

       if(a.getText().toString().length() == 0 || usr == "" || usr == null) 
        a.setError(" User name is required!"); 
       if(b.getText().toString().length() == 0 || pass =="" || pass == null) 
        b.setError("Password is required!"); 
       else{ 
        password = helper.searchPass(usr); 
       } 

       if (a.getText().toString().equals("admin") && b.getText().toString().equals("admin")) 
       { 
        Intent intent = new Intent(getApplicationContext(), AdminDisplay.class); 
        startActivity(intent); 
       }else{ 
        if (pass.equals(password) && password != null) { 
         Intent intent = new Intent(getApplicationContext(), EmpDetail.class); 
         intent.putExtra("usr", usr); 

         TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
         String uid = telephonyManager.getDeviceId(); 
         String manufacturer = Build.MANUFACTURER; // Not used in current scenario 
         String model = Build.MODEL; 
         int version = Build.VERSION.SDK_INT; 
         String versionRelease = Build.VERSION.RELEASE; // not used in current scenario 
         String msg = "IMEI No: " + uid + "\n" + "Manufacturer is :" + manufacturer + "\n" + "Model is :" + model + "\n" + "Os Version is :" + version + "\n" + "VersionRelease is :" + versionRelease; 
         Toast toast = Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG); 
         toast.show(); 

         Register r = new Register(); 
         r.setImei_no(uid); 
         r.setDev_model(model); 
         r.setOs_version(version); 
         r.setUname(usr); 

         helper.updateTable(r); /*For updating table with new Coloumn*/ 

         startActivity(intent); 
        } 
        else 
        { 
         Toast err_pass = Toast.makeText(MainActivity.this,"UserName and Password don't Match",Toast.LENGTH_SHORT); 
         err_pass.show(); 
        } 
       } 


      } 
      if (v.getId() == R.id.BSignup) 
      { 
       Intent intent = new Intent(getApplicationContext(), Registration.class); 
       startActivity(intent); 
      } 
     } 

    } 

//DatabaseHelper.java

package com.example.yadapras.mobiltyemp; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.DatabaseUtils; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.ArrayMap; 
import android.util.Log; 

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

/** 
* Created by yadapras on 7/8/2016. 
*/ 
public class DatabaseHelper extends SQLiteOpenHelper { 


    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "registrationDB.db"; 
    public static final String TABLE_NAME = "registrations"; 

    public static final String COLUMN_ID = "id"; 
    public static final String COLUMN_USERNAME = "username"; 
    public static final String COLUMN_PASSWORD= "password"; 
    public static final String COLUMN_RE_PASSWORD= "re_password"; 
    public static final String COLUMN_NAME= "name"; 
    public static final String COLUMN_EMAIL= "email"; 
    public static final String COLUMN_PHONE_NO= "phone_no"; 

    /*Adding three coloumn IMEI_NO,OS_Version,Model_Device Respectively*/ 

    public static final String COLUMN_IMEI_NO = "imei_no"; 
    public static final String COLUMN_DEV_MODEL = "dev_model"; 
    public static final String COLUMN_OS_VERSION = "os_version"; 


    SQLiteDatabase sqLiteDatabase; 
    private static final String TABLE_CREATE = "create table registrations(id integer primary key not null, " + 
      "username text not null, password text not null, re_password text not null, name text not null, email text not null," + 
      "phone_no number not null,imei_no text, dev_model text, os_version text);"; 


    public DatabaseHelper(Context context) { 
     super(context,DATABASE_NAME,null,DATABASE_VERSION); 
    } 


    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     sqLiteDatabase.execSQL(TABLE_CREATE); 
     this.sqLiteDatabase=sqLiteDatabase; 
     Log.d("#####Table Value",TABLE_CREATE); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
     String query = "DROP TABLE IF EXISTS " +TABLE_NAME ; 
     sqLiteDatabase.execSQL(query); 
     this.onCreate(sqLiteDatabase); 
    } 

    public void registerUser(Register r) { 
     /*Inserting anything in to the dataBase make sure it should be writable*/ 
     sqLiteDatabase = getWritableDatabase(); 
     ContentValues values = new ContentValues(); 

     String query = "select * from registrations"; 
     Cursor cursor = sqLiteDatabase.rawQuery(query,null); 

     int count = cursor.getCount(); 

     Log.d("##count",""+count); 
     values.put(COLUMN_ID,count); 
     Log.d("##id",r.getUname()); 
     values.put(COLUMN_USERNAME,r.getUname()); 
     values.put(COLUMN_PASSWORD,r.getPassword()); 
     values.put(COLUMN_RE_PASSWORD,r.getRe_password()); 
     values.put(COLUMN_NAME,r.getName()); 
     values.put(COLUMN_EMAIL, r.getEmail()); 
     values.put(COLUMN_PHONE_NO, r.getPhone_no()); 

     sqLiteDatabase.insert(TABLE_NAME, null,values); /*this will insert Register object in to the Database*/ 

     sqLiteDatabase.close(); 
    } 

    public String searchPass(String usr) { 
     sqLiteDatabase = this.getReadableDatabase(); 
     String query = "select username,password from "+TABLE_NAME; 
     Cursor cursor = sqLiteDatabase.rawQuery(query,null); 
     String a,b ; // a and b will be userName and Password respectively 
     b = "Not Found"; 
     if (cursor.moveToFirst()) 
     { 
      do { 
       a = cursor.getString(0); 
       Log.d("##username from db",a); 
       if (a.equals(usr)) 
       { 
        b = cursor.getString(1); 
        break; 
       } 
      }while (cursor.moveToNext()); 
     } 
     return b; 
    } 

    public JSONObject showDetail(String usr) { 
     sqLiteDatabase = this.getReadableDatabase(); 
     String query ="SELECT * FROM registrations where username='"+usr+"'" ;//"select * from registrations where username = p"; 
     // String query = "SELECT * FROM registrations"; 
     Cursor cursor = sqLiteDatabase.rawQuery(query,null); 
     JSONObject data = new JSONObject(); 
     if (cursor.moveToFirst()){ 
      do { 

       int columnsQty = cursor.getColumnCount(); 
       Log.d("###count-->", String.valueOf(columnsQty)); 
       for (int idx=0; idx<columnsQty; ++idx) { 
        try { 
         data.put(cursor.getColumnName(idx),cursor.getString(idx)); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

       } 
      }while (cursor.moveToNext()); 
     } 
     cursor.close(); 
     Log.d("###Data Value",data.toString()); 
     return data; 
    } 

    public void updateTable(Register r) { 
     SQLiteDatabase db = getWritableDatabase(); 

     ContentValues cv = new ContentValues(); 

     cv.put(COLUMN_IMEI_NO,r.getImei_no()); 
     Log.d("###Column_IMEI_NO",r.getImei_no()); 
     cv.put(COLUMN_DEV_MODEL,r.getDev_model()); 
     cv.put(COLUMN_OS_VERSION,r.getOs_version()); 
     db.update(TABLE_NAME,cv,"username = ?",new String[]{r.getUname()});; /*Working for all fields*/ 

      /*SQLiteDatabase db = getWritableDatabase(); 

      ContentValues cv = new ContentValues(); 

      cv.put(COLUMN_IMEI_NO,r.getImei_no()); 
      Log.d("###Column_IMEI_NO",r.getImei_no()); 
      cv.put(COLUMN_DEV_MODEL,r.getDev_model()); 
      cv.put(COLUMN_OS_VERSION,r.getOs_version()); 
      String updateQuery = "Update registrations set " + COLUMN_IMEI_NO + " = '"+ r.getImei_no() +"' where " + COLUMN_USERNAME + "="+"'"+ r.getUname() +"'"; 
      db.execSQL(updateQuery); 
      db.close();*/ 
    } 

} 

//AdminDisplay.java

package com.example.yadapras.mobiltyemp; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.TextView; 

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

import java.util.List; 

public class AdminDisplay extends AppCompatActivity { 


    DatabaseHelper helper = new DatabaseHelper(this); 
    TextView id,name,email,mobileno,imei_no,dev_model ; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.admin_display); 
     TableLayout table = (TableLayout)findViewById(R.id.tableLayout1) ; 
     id = (TextView)findViewById(R.id.admin_usr_id); 
     name = (TextView)findViewById(R.id.admin_Uname); 
     email = (TextView)findViewById(R.id.admin_usr_email); 
     mobileno = (TextView)findViewById(R.id.admin_usr_phone); 
     imei_no = (TextView)findViewById(R.id.admin_usr_imeiNo); 
     dev_model = (TextView)findViewById(R.id.admin_usr_dev_model); 

     JSONObject details = helper.showDetail("pcu9044"); // ***Here i'm trying registered user so i'm getting only this user field in TableLayout .*** 

     for (int i=0; i<details.length();i++){ 
      TableRow row = (TableRow)findViewById(R.id.tableRow1); 

      try { 
       table.removeView(row); 
       ((TextView)row.findViewById(R.id.admin_usr_id)).setText(details.getString("id")); 
       ((TextView)row.findViewById(R.id.admin_usr_email)).setText(details.getString("email")); 
       ((TextView)row.findViewById(R.id.admin_Uname)).setText(details.getString("name")); 
       ((TextView)row.findViewById(R.id.admin_usr_phone)).setText(details.getString("phone_no")); 
       ((TextView)row.findViewById(R.id.admin_usr_imeiNo)).setText(details.getString("imei_no")); 
       ((TextView)row.findViewById(R.id.admin_usr_dev_model)).setText(details.getString("dev_model")); 
       table.addView(row); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    } 
} 

я» m прилагается скриншот моего вывода, если у вас есть сомнения, пожалуйста, не стесняйтесь спрашивать. Спасибо заранее.

Result output with my code

+0

Вы думаете, при помощи ListView или RecyclerView, чтобы показать свои данные? –

+0

@MiguelBenitez, но мы cnt показываем полные записи в виде списка? У меня нет большой идеи об этом –

+0

В представлении списка или ресайклеров вы можете раздуть другой вид с таким количеством текстовых просмотров, сколько хотите, чтобы вы могли показать всю свою полную запись в таблице. Вам нужен пример? –

ответ

1

Hello Techie :) Я решил свою проблему после прочтения многих статей по макету таблицы через Интернет. Я даю это решение проблемы с Table-Layout, надеюсь, это поможет другим.

AdminDisplay.java # редактируемые Версия

 package com.example.yadapras.mobiltyemp; 

    import android.content.Context; 
    import android.database.Cursor; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.database.sqlite.SQLiteException; 
    import android.graphics.Color; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.util.JsonReader; 
    import android.util.Log; 
    import android.view.Gravity; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.widget.TableLayout; 
    import android.widget.TableRow; 
    import android.widget.TextView; 

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

    import java.util.List; 

    public class AdminDisplay extends AppCompatActivity { 

     TableLayout tableLayout; 
     private SQLiteDatabase db; 
     private Context context ; 

     DatabaseHelper helper = new DatabaseHelper(this); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.admin_display); 
      context = this; 
      DatabaseHelper helper = new DatabaseHelper(this); 

      tableLayout = (TableLayout)findViewById(R.id.tableLayout1) ; 
      TableRow rowHeader = new TableRow(context); 
      rowHeader.setBackgroundColor(Color.parseColor("#c0c0c0")); 
      rowHeader.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, 
        TableLayout.LayoutParams.WRAP_CONTENT)); 
      String[] headerText={"ID","USERNAME","EMAIL","PHONE_NO","IMEI_NO","DEV_MODEL"}; 

      for(String c:headerText) { 
       TextView tv = new TextView(this); 
       tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, 
         TableRow.LayoutParams.WRAP_CONTENT)); 
       tv.setGravity(Gravity.CENTER); 
       tv.setTextSize(18); 
       tv.setPadding(5, 5, 5, 5); 
       tv.setText(c); 

       rowHeader.addView(tv); 
      } 
      tableLayout.addView(rowHeader); 

      SQLiteDatabase db = helper.getReadableDatabase(); 
      db.beginTransaction(); 

      try 
      { 
       String selectQuery = "SELECT * FROM "+ DatabaseHelper.TABLE_NAME; 
       Cursor cursor = db.rawQuery(selectQuery,null); 
       if(cursor.getCount() >0) 
       { 
        while (cursor.moveToNext()) { 
         // Read columns data 
         int id   = cursor.getInt(cursor.getColumnIndex("id")); 
         String user_name= cursor.getString(cursor.getColumnIndex("username")); 
         String email= cursor.getString(cursor.getColumnIndex("email")); 
         String phone_no = cursor.getString(cursor.getColumnIndex("phone_no")); 
         String imei_no = cursor.getString(cursor.getColumnIndex("imei_no")); 
         String dev_model = cursor.getString(cursor.getColumnIndex("dev_model")); 

         // dara rows 
         TableRow row = new TableRow(context); 
         row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, 
           TableLayout.LayoutParams.WRAP_CONTENT)); 
         String[] colText={id+"",user_name,email,phone_no,imei_no,dev_model}; 
         for(String text:colText) { 
          TextView tv = new TextView(this); 
          tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, 
            TableRow.LayoutParams.WRAP_CONTENT)); 
          tv.setGravity(Gravity.CENTER); 
          tv.setTextSize(16); 
          tv.setPadding(5, 5, 5, 5); 

          tv.setText(text); 
          row.addView(tv); 
         } 
         tableLayout.addView(row); 

        } 

       } 
       db.setTransactionSuccessful(); 

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

      } 
      finally 
      { 
       db.endTransaction(); 
       // End the transaction. 
       db.close(); 
       // Close database 
      } 

     } 
    } 
0

Удалить table.removeView(row); из цикла, если вы не получите только одну строку в конце цикла, как он удаляет предыдущую строку, когда новая строка добавляется

for (int i=0; i<details.length();i++){ 
      TableRow row = (TableRow)findViewById(R.id.tableRow1); 

      try { 

       ((TextView)row.findViewById(R.id.admin_usr_id)).setText(details.getString("id")); 
       ((TextView)row.findViewById(R.id.admin_usr_email)).setText(details.getString("email")); 
       ((TextView)row.findViewById(R.id.admin_Uname)).setText(details.getString("name")); 
       ((TextView)row.findViewById(R.id.admin_usr_phone)).setText(details.getString("phone_no")); 
       ((TextView)row.findViewById(R.id.admin_usr_imeiNo)).setText(details.getString("imei_no")); 
       ((TextView)row.findViewById(R.id.admin_usr_dev_model)).setText(details.getString("dev_model")); 
       table.addView(row); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
+0

Я хочу показать полные записи db в одиночном макете таблицы. я делаю только для одного пользователя reg, и вы поможете мне найти PLZZ в этой строке ---> JSONObject details = helper.showDetail ("pcu9044"); // *** Здесь я пытаюсь зарегистрированного пользователя, поэтому я получаю только это поле пользователя в TableLayout. *** –

+0

, пожалуйста, см. Мой ответ, если его правильный знак PLZ как правильный, и если это полезно для других, пожалуйста, сделайте upVote для мой вопрос Спасибо u :) –

1

Проблема что я вижу в том, что, когда вы говорите:

«я стараюсь с определенным именем пользователя и его показ в виде таблицы, но это не мое требование , я должен показать всех пользователей в макете таблицы ».

При поиске одного пользователя из базы данных вы получаете только одну запись в базе данных, связанную с именем пользователя, которое вы ищете. Ваш метод helper.showDetail() возвращает один JSONObject - этот объект соответствует записи в базе данных, где username = pcu9044.

Если я правильно понимаю вашу ситуацию, вам нужно вызвать метод, который выбирает ВСЕ записи из базы данных, чтобы отображать то, что вы хотите на экране. Ваш helper.showDetail() будет хорошим началом, но вы можете немного модифицировать код, чтобы достичь того, что хотите.

Я бы рекомендовал использовать список или массив JSONObjects вместо одного JSONObject. Инициализируйте свою структуру данных до того, как вы введете условие if (cursor.moveToFirst()) (например, у вас есть это сейчас), но внутри каждой итерации цикла вы создаете новый объект, заполняете его тем, что возвращает курсор для этой строки, а затем добавляете его в структуру ,Код будет выглядеть примерно так:

public JSONArray showDetail() { 
    sqLiteDatabase = this.getReadableDatabase(); 
    String query ="SELECT * FROM registrations";// * THIS WILL RETURN ALL RECORDS IN REGISTRATIONS 
    Cursor cursor = sqLiteDatabase.rawQuery(query,null); 
    //JSONObject data = new JSONObject(); *change this to an array 
    JSONArray data = new JSONArray(); 
    if (cursor.moveToFirst()){ 
     do { 

      int columnsQty = cursor.getColumnCount(); 
      Log.d("###count-->", String.valueOf(columnsQty)); 

      // Must create a new object each time you iterate to a new row to add to the array 
      JSONObject record = new JSONObject(); 

      for (int idx=0; idx<columnsQty; ++idx) { 
       try { 
        // Fill the object 
        record.put(cursor.getColumnName(idx),cursor.getString(idx)); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } 

      // Add the object to the array and repeat 
      data.put(record); 
     }while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    Log.d("###Data Value",data.toString()); 
    return data; 
} 

Если вы делаете это таким образом, ваш helper.showDetail() возвращает массив, заполненный объектами, каждый символизирующие ряд. Оттуда ваш AdminDisplay.java должен затем пройти через массив, захватить каждый объект и заполнить новую строку необходимой информацией.

Надеюсь, это поможет!

+0

thks для вашего Ценность времени и идеи его помощи мне :), но я решил свою проблему по-разному, и я даю ответы на мои вопросы, пожалуйста, посетите их, пожалуйста, отметьте, правильно ли они и дайте мне право голоса по моему вопросу, если это поможет другим :) –

0

Привет, попробуйте этот метод, я только что обновил метод вашего кода, вы можете заменить его собственным методом. Важные isAdmin истинно, когда администратор получает детали и false, когда пользователь.

public JSONObject showDetail(String usr, boolean isAdmin) 
{ 
    sqLiteDatabase = this.getReadableDatabase(); 
    String query = ""; 
    if (isAdmin) 
     query = "SELECT * FROM registrations"; 
    else 
     query ="SELECT * FROM registrations where username='"+usr+"'" ;//"select * from registrations where username = p"; 

    Cursor cursor = sqLiteDatabase.rawQuery(query,null); 
    JSONObject data = new JSONObject(); 
    if (cursor.moveToFirst()){ 
     do { 

      int columnsQty = cursor.getColumnCount(); 
      Log.d("###count-->", String.valueOf(columnsQty)); 
      for (int idx=0; idx<columnsQty; ++idx) { 
       try { 
        data.put(cursor.getColumnName(idx),cursor.getString(idx)); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } 
     }while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    Log.d("###Data Value",data.toString()); 
    return data; 
} 

Это может помочь вам и сообщить мне, если у вас есть какие-либо вопросы.

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