在后台线程Android中使用Realm一次存储所有信息
我正在开发一个android应用程序,我正在使用Relam作为本地数据库。我有RESTAPI,一个用于所有用户信息,另一个用于新闻信息。我有两个按钮。一个用于显示用户信息,另一个用于显示新闻信息。现在,我的代码完成了什么,在登录后,我需要首先单击相应的用户信息和新闻信息按钮,然后我可以看到这些图像和新闻。但是,如果在登录后关闭连接,则数据不会显示在视图中。我正在详细解释我的代码。而且我在图像加载方面有问题。我如何才能使功能,让用户可以得到所有的信息后,登录。我真的很抱歉这么长的代码。如果有人告诉我如何修改代码以将所有数据存储在后台线程中,以便用户在登录后立即获得所有信息,这将对我非常有帮助 登录页面中我想开始的部分在后台线程Android中使用Realm一次存储所有信息,android,multithreading,realm,realm-mobile-platform,background-thread,Android,Multithreading,Realm,Realm Mobile Platform,Background Thread,我正在开发一个android应用程序,我正在使用Relam作为本地数据库。我有RESTAPI,一个用于所有用户信息,另一个用于新闻信息。我有两个按钮。一个用于显示用户信息,另一个用于显示新闻信息。现在,我的代码完成了什么,在登录后,我需要首先单击相应的用户信息和新闻信息按钮,然后我可以看到这些图像和新闻。但是,如果在登录后关闭连接,则数据不会显示在视图中。我正在详细解释我的代码。而且我在图像加载方面有问题。我如何才能使功能,让用户可以得到所有的信息后,登录。我真的很抱歉这么长的代码。如果有人告诉
private void loginUser(final String mEmail, final String mPassword) {
final GlobalClass globalClass = new GlobalClass();
globalClass.setEmail_info( mEmail );
setFilePath();
RequestQueue queue = Volley.newRequestQueue( LoginPage.this );
StringRequest strReq = new StringRequest( Request.Method.POST,
LOGIN_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d( TAG, "Register Response: " + response.toString() );
//parse your response here
if (response.contains( "overview" )) {
showProgress( true );
globalClass.setImage_urlpath( Constants.HTTP.PHOTO_URL + mEmail);
String str = globalClass.readDatafromStorage();
Log.d("----After Login---",str);
if ( !str.contains("ACTIVATE") ) {
Log.d( "----After Login---", "After Login" );
}
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(KEY_EMAIL, mEmail);
editor.putString(KEY_PASSWORD, mPassword);
editor.commit();
showProgress(false);
Intent loginIntent = new Intent(LoginPage.this, MainOptionPage.class);
loginIntent.putExtra(KEY_EMAIL, mEmail);
startActivity(loginIntent);
} else {
userEmail.setError(getString(R.string.error_incorrect_login));
userEmail.requestFocus();
}
}
}, new Response.ErrorListener() {
@Override
....
private void登录用户(最终字符串mEmail,最终字符串mPassword){
最终全局类GlobalClass=新全局类();
globalClass.setEmail_信息(mEmail);
setFilePath();
RequestQueue=Volley.newRequestQueue(LoginPage.this);
StringRequest strReq=新的StringRequest(Request.Method.POST,
登录\u URL,新响应。侦听器(){
@凌驾
公共void onResponse(字符串响应){
Log.d(标记,“寄存器响应:+Response.toString());
//在这里解析您的响应
if(response.contains(“概述”)){
显示进度(真实);
globalClass.setImage_urlpath(Constants.HTTP.PHOTO_URL+mEmail);
字符串str=globalClass.readDatafromStorage();
Log.d(“----登录后----”,str);
如果(!str.contains(“ACTIVATE”)){
Log.d(“----登录后----”,“登录后”);
}
SharedReferences.Editor=SharedReferences.edit();
编辑器.putString(KEY_EMAIL,mEmail);
编辑器.putString(关键字密码,mPassword);
commit();
显示进度(假);
Intent loginIntent=新Intent(LoginPage.this,main optionpage.class);
LoginInt.putExtra(关键电子邮件,mEmail);
startActivity(登录);
}否则{
userEmail.setError(getString(R.string.error\u登录不正确));
userEmail.requestFocus();
}
}
},new Response.ErrorListener(){
@凌驾
....
这是我的用户页面代码
public class MyColleaguesPage extends AppCompatActivity implements ColleagueController.UserCallbackListener {
private List<MyColleagueModel> myColleagueList = new ArrayList<>();
private Realm colleagueRealm;
private RealmResults<MyColleagueModel> colleagueResult;
private List<MyColleagueModel> filteredModelList;
private RealmChangeListener realmListener;
private static final String DIALOG_TAG = "EmployeeDialog";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_layout);
configViews();
}
private void configViews() {
recyclerView = this.findViewById(R.id.colleagues_recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(MyColleaguesPage.this));
recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
colleagueRealm = Realm.getDefaultInstance();
RealmResults<MyColleagueModel> results = colleagueRealm.where(MyColleagueModel.class).findAll();
for (int i = 0; i < results.size(); i++) {
myColleagueList.add(results.get(i));
}
adapter = new MyColleaguesAdapter(myColleagueList,getApplicationContext());
//adapter = new MyColleaguesAdapter(myColleagueList,getApplicationContext());
Log.d( "adapter value is"+"", String.valueOf( adapter ) );
recyclerView.setAdapter(adapter);
}
//successful
@Override
public void onFetchStart() {
}
@Override
public void onFetchProgress(ColleagueModel colleague) {
//adapter.addColleague(colleague);
}
@Override
public void onFetchProgress(List<ColleagueModel> colleagueList) {
}
@Override
public void onFetchComplete() {
}
@Override
public void onFetchFailed() {
}
}
公共类MyColleaguesPage扩展AppCompatActivity实现ColleAgueControl.UserCallbackListener{
private List myColleagueList=新建ArrayList();
私人领域学院;
私人地产结果集合结果;
私有列表过滤器模型;
私有RealmChangeListener realmListener;
私有静态最终字符串对话框\u TAG=“EmployeeDialog”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_布局);
配置视图();
}
私有void configViews(){
recyclerView=this.findViewById(R.id.com\u recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(新的LinearLayoutManager(MyColleaguesPage.this));
setRecycledViewPool(新的recyclerView.RecycledViewPool());
colleagueralm=Realm.getDefaultInstance();
RealmResults results=collagueralm.where(mycollaguemodel.class).findAll();
对于(int i=0;i
这是我同事页面的控制器类
public class ColleagueController {
private static final String TAG = ColleagueController.class.getSimpleName();
private UserCallbackListener mListener;
private ColleagueResApiManager mApiManager;
Realm myColleague_realm;
public ColleagueController() {
mApiManager = new ColleagueResApiManager();
}
public void startFetching(){
myColleague_realm = Realm.getDefaultInstance();
mApiManager.getColleagueApi().getColleague(new Callback<String>() {
@Override
public void success(String s, Response response) {
Log.d(TAG, "JSON :: " + s);
try {
JSONArray array = new JSONArray(s);
for(int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
Log.d("-----Start Fetching---", object.optString( "name" ));
myColleague_realm.beginTransaction();
MyColleagueModel mycolleague = myColleague_realm.createObject( MyColleagueModel.class );
mycolleague.setName( object.optString( "name" ) );
.... data ) );
myColleague_realm.commitTransaction();
}
} catch (JSONException e) {
mListener.onFetchFailed();
}
// mListener.onFetchComplete();
}
@Override
public void failure(RetrofitError error) {
Log.d(TAG, "Error :: " + error.getMessage());
if (mListener != null) {
mListener.onFetchComplete();
}
}
});
}
public interface UserCallbackListener{
void onFetchComplete();
void onFetchFailed();
}
}
公共类CollegController{
私有静态最终字符串标记=collaguecontroller.class.getSimpleName();
私有用户callbacklistener mListener;
私人学院管理员;
领域myColleague_领域;
公共合议经济主任(){
mApiManager=新的CollegUserAspiManager();
}
公开作废开始蚀刻(){
myColleague_realm=realm.getDefaultInstance();
mApiManager.GetCollegUEAPI().GetCollaborate(新回调(){
@凌驾
public void成功(字符串s,响应){
Log.d(标记“JSON::”+s);
试一试{
JSONArray数组=新的JSONArray;
对于(int i=0;i public class NewsPage extends AppCompatActivity{
private RecyclerView recyclerView;
private NewsAdapter adapter;
private Realm newsRealm;
private List<NewsRealmModel> mNewsList;
private List<NewsRealmModel> filteredModelList;
private NewsController mController;
Constant constant;
SharedPreferences app_preferences;
int appTheme;
int themeColor;
int appColor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( R.layout.news_page_layout);
configViews();
}
private void configViews() {
recyclerView = this.findViewById(R.id.news_recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(NewsPage.this));
recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
Realm newsRealm = Realm.getDefaultInstance();
RealmResults<NewsRealmModel> temp = newsRealm.where(NewsRealmModel.class).findAll();
mNewsList = new ArrayList<>();
for (int i = 0; i < temp.size(); i++) {
mNewsList.add(temp.get(i));
}
adapter = new NewsAdapter(mNewsList,getApplicationContext());
Log.d( "adapter value is"+"", String.valueOf( adapter ) );
recyclerView.setAdapter(adapter);
}
}
public class NewsController {
private static final String TAG = NewsController.class.getSimpleName();
private UserCallbackListener mListener;
private NewsRestApiManager mApiManager;
private AppImage appImages;
Realm myNews_realm;
ArrayList<String> title_list = new ArrayList<>();
GlobalClass globalClass = new GlobalClass();
public NewsController(UserCallbackListener listener) {
mListener = listener;
mApiManager = new NewsRestApiManager();
}
public void startFetching() {
myNews_realm = Realm.getDefaultInstance();
mApiManager.getNewsApi().getNews(new Callback<String>() {
@Override
public void success(String s, Response response) {
Log.d(TAG, "JSON :: " + s);
try {
JSONArray array = new JSONArray(s);
for (int i = 0; i < array.length(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
Log.d("-----Start Fetching---", jsonObject.optString("title"));
if (!myNews_realm.isInTransaction()) {
myNews_realm.beginTransaction();
NewsRealmModel news = new NewsRealmModel();
....... data
}
myNews_realm.copyToRealm(news);
myNews_realm.commitTransaction();
mListener.onFetchProgressNews(news);
} else {
myNews_realm.commitTransaction();
}
}
} catch (JSONException e) {
mListener.onFetchFailed();
}
mListener.onFetchComplete();
}
@Override
public void failure(RetrofitError error) {
Log.d(TAG, "Error :: " + error.getMessage());
mListener.onFetchComplete();
}
});
}
public interface UserCallbackListener {
void onFetchProgressNews(NewsRealmModel news);
void onFetchComplete();
void onFetchFailed();
}
public class RealmGsonObjectRequest<T, M extends RealmModel> extends Response<Void> {
...
@Override
protected Response<Void> parseNetworkResponse(
NetworkResponse response) {
try {
String json = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
T data = gson.fromJson(json, clazz);
// write the downloaded data into the Realm on bg thread
try(Realm r = Realm.getDefaultInstance()) {
M model = mapper.toModel(data);
r.executeTransaction((realm) -> {
realm.insertOrUpdate(model);
});
}
return Response.success(null,
HttpHeaderParser.parseCacheHeaders(response)
);
} // handle errors
}
public class RealmGsonListRequest<T, M extends RealmModel> extends Response<Void> {
...
@Override
protected Response<Void> parseNetworkResponse(
NetworkResponse response) {
try {
String json = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
List<T> data = gson.fromJson(json, new TypeToken<ArrayList<T>>() {}.getType());
// write the downloaded data into the Realm on bg thread
try(Realm r = Realm.getDefaultInstance()) {
M model = mapper.toModel(data);
r.executeTransaction((realm) -> {
realm.insertOrUpdate(model);
});
}
return Response.success(null,
HttpHeaderParser.parseCacheHeaders(response)
);
} // handle errors
}