2016-02-03 2 views
-2

Я хочу поделиться кодом между несколько мероприятий в Android студия. У меня Googled совсем немного, но может показаться, что можно найти, как делиться кодом между проектами, или как делиться данными между действиями.Как я могу обмениваться кодами между несколькими действиями в Android?

Причина, по которой я хотел бы сделать это, у меня есть несколько блоков try {} catch, и если есть ошибка, я хотел бы сохранить эти данные в базе данных sqlite. Я могу поместить одну и ту же функцию в каждое действие и вызвать ее, но это кажется действительно неэффективным, и это боль, когда мне нужно немного изменить способ ее вставки данных и т. Д.

Я бы передал два параметра, activity имя и ошибка, и ожидаем флаг успеха/отказа.

Любые мысли приветствуются!

+3

сделать один общий класс и функции и вызывать его из любой деятельности –

+2

Как насчет создать родительский класс и ребенок расширяет его? –

+0

сделайте абстрактную деятельность и поместите в нее функцию, которая имеет общую функциональность и расширяет эту деятельность всеми вашими действиями. –

ответ

3

Создать один общий класс в именах пакетов общего, как показано ниже:

public class Common { 
private static Dialog dialog = null; 

/* 
* A Common function to display toast. 
* */ 
public static Void displayToast(Context context, String strToast) { 
    Toast.makeText(context, strToast, Toast.LENGTH_SHORT).show(); 
    return null; 
} 

/* 
* A Common function to display Log. 
* */ 
public static Void displayLog(String strTitle, String strText) { 
    Log.d(strTitle, strText); 
    return null; 
} 

/* 
* A Common function to check internet connection. 
* */ 
public static boolean isOnline(Context c) { 
    try { 
     ConnectivityManager cm = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

/* 
* A common function to check length for input. 
* */ 
public static boolean isValidLength(String fName) { 
    if (fName.trim().length() > 0) { 
     return true; 
    } 
    return false; 
} 

/* 
* A common function to validate Email id. 
* */ 
public static boolean isValidEmail(String email) { 
    String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" 
      + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 

    Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
    Matcher matcher = pattern.matcher(email); 
    return matcher.matches(); 
} 

Теперь, получить доступ к этим функциям в любой вашей деятельности, как показано ниже:

Common.displayToast(MainActivity.this, "Message"); 
if (Common.isOnline(MainActivity.this)) { 
       //your code 
      } else { 
       //your code 
      } 

Таким же образом, вызов необходимых функций.

+0

Большое спасибо, что на самом деле объясняет, что происходит, а не расплывчатые комментарии! – Elmer

+0

@ Elmer wc bro .. – user5716019

0

Вы можете создать BaseActivityClass и продлить всю деятельность с использованием этого базового класса.

Как:

class BaseActivity extends Activity 
{ 
} 

class your Actvity extends BaseActivity 
{} 

Напишите весь код в базовой деятельности и использовать в каждой деятельности соответственно.

0

Вам нужно определить класс с именем DatabaseHandler расширяет SQLiteOpenHelper (добавить эту функцию с общественной спецификации доступа в него), а также поставить все соответствующие функции базы данных в ней. После этого вам нужно инициализировать свой объект в действии, где вы хотите вызвать его функциональность и вызвать требуемую функцию. Вы также можете использовать singleton design pattern для вашего класса DatabaseHandler, если вы используете его в своем приложении.

DatabaseHandler

package package_name; 

import java.util.ArrayList; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.MatrixCursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

import <packagename>.Profile; 

public class DatabaseHandler extends SQLiteOpenHelper { 

    private Context context = null; 
    //private SQLiteDatabase mWDB, mRDB; 
    private static final String TAG = DatabaseHandler.class.getSimpleName(); 
    /** Database Version <br/> Should change if any changes in DB for higher verion*/ 
    private static final int DATABASE_VERSION = 1; 
    // Database Name 
    private static final String DATABASE_NAME = "db_name"; 
    // Table Names 
    public static final String TABLE_PROFILE = "TABLE_PROFILE"; 


    public DatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     this.context = context; 
    } 

    // Creating Tables 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     try { 

      enableForeignKeysConstraint(db); 

      db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_PROFILE 
        + " (user_id TEXT, email TEXT, name TEXT, address TEXT, address_x TEXT, address_y TEXT," 
        + " image_src TEXT, dob datetime, gender TEXT, profession TEXT, dateCreated datetime," 
        + " dateModified datetime);"); 

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

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop table if necessary, here 
     onCreate(db); 
    } 

    @Override 
    public void onConfigure(SQLiteDatabase db) { 
     super.onConfigure(db); 

     enableForeignKeysConstraint(db); 
    } 

    /** 
    * We need to enable foreign keys before executing any query creating a table, also on database 
    * configuration changes. For it, this method helps. 
    * @param db SQLiteDatabase 
    */ 
    public void enableForeignKeysConstraint(SQLiteDatabase db) { 
     if (!db.isReadOnly()) { 
      // Enable foreign key constraints 
      db.execSQL("PRAGMA foreign_keys=ON;"); 
     } 
    } 


    //////////////////////////////////////////////////////////////////////////////////////////////// 
    /////////////////////////////////////////// INSERT DATA //////////////////////////////////////// 
    /** 
    * Inserts a profile record into database. 
    * @param profile 
    * @param dateCreated 
    */ 
    private void insertProfile(Profile profile, String dateCreated) { 
     SQLiteDatabase db = null; 
     try { 
      db = this.getWritableDatabase(); 
      Log.i(TAG, "insertProfile(): Query is processing ..."); 

      ContentValues values = new ContentValues(); 
      values.put("user_id", profile.getUserId()); 
      values.put("name", profile.getName()); 
      values.put("email", profile.getEmail()); 

      long id = db.insert(TABLE_PROFILE, null, values); 
      if (id != -1) 
       Log.i(TAG, "insertProfile(): Inserted successfully"); 
      else 
       Log.i(TAG, "insertProfile(): Insertion failed"); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 

     if(db != null) 
      db.close(); 
    } 

    //////////////////////////////////////////////////////////////////////////////////////////////// 
    /////////////////////////////////////////// SELECT DATA //////////////////////////////////////// 
    /** 
    * To get profile against user id stored into local database. 
    * @param userId 
    * @return Profile - An object if exists otherwise null. 
    */ 
    public Profile getProfile(String userId) { 
     Profile profile = null; 
     String query = "SELECT * FROM "+TABLE_PROFILE+ " WHERE user_id = "+userId+";"; 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(query, null); 
     Log.i(TAG, "getProfile():" + query); 

     if (cursor.moveToFirst()) { 
      do { 
       profile = new Profile(); 
       profile.setUserId(cursor.getString(0)); 
       profile.setEmail(cursor.getString(1)); 
       profile.setName(cursor.getString(2)); 
      } while (cursor.moveToNext()); 
     } 
     cursor.close(); 
     db.close(); 

     return profile; 
    } 

    //////////////////////////////////////////////////////////////////////////////////////////////// 
    /////////////////////////////////////////// DELETE DATA //////////////////////////////////////// 
    /** 
    * Deletes the favorite place record against userId. 
    * @param place_id 
    */ 
    public void deleteProfile(String userId) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     int deleteCount = db.delete(TABLE_PROFILE, "user_id=" + userId, null); 
     if(deleteCount > 0) 
      Log.i(TAG, "deleteProfile(): Deleted profile with id = " + userId); 
    } 


    //////////////////////////////////////////////////////////////////////////////////////////////// 
    /////////////////////////////////////////// UPDATE DATA //////////////////////////////////////// 
    private void updateProfile(Profile profile) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put("name", profile.getName()); 

     db.update(TABLE_PROFILE, values, "user_id = '"+profile.getUserId()+"'", null); 
     Log.i(TAG,"updateProfile(): Updated profile for userId="+profile.getUserId()); 
    } 
} 

Профиль

public class Profile { 

    private String userId; 
    private String name; 
    private String email; 

    public Profile() { 
     userId = ""; 
     name = ""; 
     email = ""; 
    } 

    public String getUserId() { 
     return userId; 
    } 

    public void setUserId(String userId) { 
     this.userId = userId; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 
} 
Смежные вопросы