Starting a new intent with FragmentsActivity - crashes - java

This is my first question and i already searched for an answer, but i couldn't find one.
My App starts with an SplashScreen Video and after the Video is done the Activity tries to start my MainActivity wich extends FragmentActivity. But the App crashes with following Log:
05-17 11:32:56.554: W/Binder(476): Caught a RuntimeException from the binder stub implementation.
05-17 11:32:56.554: W/Binder(476): java.lang.NullPointerException
05-17 11:32:56.554: W/Binder(476): at android.inputmethodservice.IInputMethodWrapper.setSessionEnabled(IInputMethodWrapper.java:280)
05-17 11:32:56.554: W/Binder(476): at com.android.internal.view.IInputMethod$Stub.onTransact(IInputMethod.java:129)
05-17 11:32:56.554: W/Binder(476): at android.os.Binder.execTransact(Binder.java:404)
05-17 11:32:56.554: W/Binder(476): at dalvik.system.NativeStart.run(Native Method)
05-17 11:32:56.554: W/InputMethodManagerService(360): Got RemoteException sending setActive(false) notification to pid 1075 uid 10052
05-17 11:32:56.574: W/IInputConnectionWrapper(514): showStatusIcon on inactive InputConnection
Here is What my SplashScreen class looks like:
public class SplashScreen extends Activity {
// Splash screen timer
private static int SPLASH_TIME_OUT = 6000;
public void Skip(View v) {
SPLASH_TIME_OUT = 0;
}
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
VideoView mVideoView = (VideoView)findViewById(R.id.intro);
String uriPath = "android.resource://de.ebs_hannover.sean.elsaapp/"+R.raw.intro_vid;
Uri uri = Uri.parse(uriPath);
mVideoView.setVideoURI(uri);
mVideoView.requestFocus();
mVideoView.start();
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
// This method will be executed once the timer is over
// Start your app main activity
Intent i = new Intent(SplashScreen.this, MainActivity.class);
startActivity(i);
// close this activity
finish();
}
}, SPLASH_TIME_OUT);
}
}
And This is my MainActivity:
public class MainActivity extends FragmentActivity{
ViewPager viewPager=null;
TextView cPosTxt =null;
#Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.activity_main);
cPosTxt = (TextView) findViewById(R.id.cPosTxt);
viewPager= (ViewPager) findViewById(R.id.pager);
FragmentManager fragmentManager=getSupportFragmentManager();
viewPager.setAdapter(new MyAdapter(fragmentManager));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
#Override
public void onPageSelected(int arg0) {
if(arg0==0) {
cPosTxt.setText(R.string.menue);
}
if (arg0==1) {
cPosTxt.setText(R.string.btn_jubi);
}
if (arg0==2) {
cPosTxt.setText(R.string.btn_info);
}
if (arg0==3) {
cPosTxt.setText(R.string.btn_story);
}
if (arg0==4) {
cPosTxt.setText(R.string.btn_events);
}
if (arg0==5) {
cPosTxt.setText(R.string.btn_current);
}
}
#Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
#Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
});
}
public void StroemClick(View v) {
viewPager.setCurrentItem(0, true);
}
public void JubiClick(View v) {
viewPager.setCurrentItem(1, true);
}
public void InfoClick(View v) {
viewPager.setCurrentItem(2, true);
}
public void StoryClick(View v) {
viewPager.setCurrentItem(3, true);
}
public void EventsClick(View v) {
viewPager.setCurrentItem(4, true);
}
public void CurrentClick(View v) {
viewPager.setCurrentItem(5, true);
}
}
class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
#Override
public Fragment getItem(int arg0) {
Fragment fragment=null;
if(arg0==0){
fragment=new MenuFragment();
}
if(arg0==1) {
fragment=new JubiFragment();
}
if(arg0==2) {
fragment=new InfoFragment();
}
if(arg0==3){
fragment=new StoryFragment();
}
if(arg0==4){
fragment=new EventsFragment();
}
if(arg0==5){
fragment=new CurrentFragment();
}
return fragment;
}
#Override
public int getCount() {
return 6;
}
}
And just in case (because i have the suggestion that this might be the problem) here is my Manifest aswell:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.ebs_hannover.sean.elsaapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#android:style/Theme.NoTitleBar.Fullscreen" >
<activity
android:name="de.ebs_hannover.sean.elsaapp.SplashScreen"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
What am i doing wrong? Without the SplashScreen at the begining it works fine... So When i set my MainActivity to the Launcher Activity in the Manifest... Thanks for any help :)

Try to add the MainActivity Class inside your <application> tag:
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#android:style/Theme.NoTitleBar.Fullscreen" >
<activity
android:name="de.ebs_hannover.sean.elsaapp.SplashScreen"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
// ADD ALL ACTIVITIES LIKE THIS:
<activity
android:name="de.ebs_hannover.sean.elsaapp.MainActivity"
android:label="#string/app_name" />
</application>

Related

Webview app to check for network and display "no internet connection" if there is none and also reload when network is available

I created a simple webview app that displays an error.html from assets when there is no network, but users cannot continue with webview once network is available. users are simply stuck in the error.html page. what i have been trying to do now is to make the webview app to check for network and display "no internet connection" if there is none and also reload when network is available.
Manifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mary">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:theme="#android:style/Theme.Holo.Light">
<activity
android:name=".MainActivity"
android:label="#string/app_name"
android:theme="#style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".Splash"
android:label="#string/app_name"
android:theme="#style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
private WebView mWebView;
SwipeRefreshLayout swipe;
private void setFullScreen() {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
}
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
swipe = (SwipeRefreshLayout) findViewById(R.id.swipe);
swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
#Override
public void onRefresh() {
LoadWeb(mWebView.getUrl());
}
});
LoadWeb("http://m.mary.org");
}
public void LoadWeb(String url){
mWebView = (WebView) findViewById(R.id.activity_main_webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.loadUrl(url);
swipe.setRefreshing(true);
mWebView.setDownloadListener(new DownloadListener() {
#Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
DownloadManager.Request myRequest = new DownloadManager.Request(Uri.parse(url));
myRequest.allowScanningByMediaScanner();
myRequest.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
DownloadManager myManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
myManager.enqueue(myRequest);
Toast.makeText(MainActivity.this, "Your File is downloading....", Toast.LENGTH_SHORT).show();
}});
mWebView.setWebViewClient(new com.example.mary.MyAppWebViewClient(){
public void onReceivedError(WebView view, int errorCode, String description,String failingUrl) {
mWebView.loadUrl("file:///android_asset/error.html");
}
public void onPageFinished(WebView view, String url) {
//hide loading image
swipe.setRefreshing(false);
//show webview
findViewById(R.id.activity_main_webview).setVisibility(View.VISIBLE);
}});
}
#Override
public void onBackPressed() {
if(mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
}
}
MyAppWebViewClient.java
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(Uri.parse(url).getHost().endsWith("m.mary.org")) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
create a broadcast receiver :
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import java.util.HashSet;
import java.util.Set;
public class NetworkStateReceiver extends BroadcastReceiver {
protected Set<NetworkStateReceiverListener> listeners;
protected Boolean connected;
public NetworkStateReceiver() {
listeners = new HashSet<NetworkStateReceiverListener>();
connected = null;
}
public void onReceive(Context context, Intent intent) {
if(intent == null || intent.getExtras() == null)
return;
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = manager.getActiveNetworkInfo();
if(ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
connected = true;
} else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
connected = false;
}
notifyStateToAll();
}
private void notifyStateToAll() {
for(NetworkStateReceiverListener listener : listeners)
notifyState(listener);
}
private void notifyState(NetworkStateReceiverListener listener) {
if(connected == null || listener == null)
return;
if(connected == true)
listener.networkAvailable();
else
listener.networkUnavailable();
}
public void addListener(NetworkStateReceiverListener l) {
listeners.add(l);
notifyState(l);
}
public void removeListener(NetworkStateReceiverListener l) {
listeners.remove(l);
}
public interface NetworkStateReceiverListener {
public void networkAvailable();
public void networkUnavailable();
}
}
in your activity use it like this :
private NetworkStateReceiver.NetworkStateReceiverListener networkStateReceiverListener = new NetworkStateReceiver.NetworkStateReceiverListener() {
#Override
public void networkAvailable() {
//todo: refresh webview
}
#Override
public void networkUnavailable() {
//todo: show error
}
};
permission in manifest:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Application restart if i changed the launcher activity in XML manifest

I have a funny problem, I have my project act wired, am following some tutorials and copied some codes, but now I figured that I cannot put any of my activities as launcher activity except the main activity , I looked really deep in it and didn't find anything that make it the only activity that fits to be the launcher activity , is it a manifest problem ? or special flag in the main activity ??!!
please take a look at the main activity and the manifest:-
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rozdoum.socialcomponents">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.CAMERA" />
<application
android:name=".Application"
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:supportsRtl="true"
android:theme="#style/AppTheme">
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="#string/facebook_app_id" />
<activity
android:name=".main.main.MainActivity"
android:configChanges="orientation|screenSize"
android:theme="#style/AppCompat.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".main.postDetails.PostDetailsActivity"
android:configChanges="orientation|screenSize"
android:label="#string/label_post_detail_activity" />
<activity
android:name=".main.post.createPost.CreatePostActivity"
android:configChanges="orientation|screenSize"
android:label="#string/label_create_post_activity" />
<activity
android:name=".main.imageDetail.ImageDetailActivity"
android:configChanges="orientation|screenSize"
android:label="#string/label_image_detail_activity"
android:theme="#style/AppCompat.Black.NoActionBar" />
<activity
android:name=".main.login.LoginActivity"
android:label="#string/title_activity_login"
android:theme="#style/AppCompat.NoActionBar" />
<activity
android:name=".main.editProfile.createProfile.CreateProfileActivity"
android:configChanges="orientation|screenSize"
android:label="#string/title_activity_create_profile" />
<activity
android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
android:theme="#style/Base.Theme.AppCompat" />
<activity
android:name=".main.profile.ProfileActivity"
android:configChanges="orientation|screenSize"
android:label="#string/title_activity_profile"
android:theme="#style/AppCompat.NoActionBar" />
<activity
android:name=".main.editProfile.EditProfileActivity"
android:configChanges="orientation|screenSize"
android:label="#string/title_activity_edit_profile" />
<activity
android:name=".main.post.editPost.EditPostActivity"
android:configChanges="orientation|screenSize"
android:label="#string/title_activity_edit_post" />
<activity
android:name=".main.usersList.UsersListActivity"
android:configChanges="orientation|screenSize"
android:theme="#style/AppCompat.NoActionBar" />
<activity
android:name=".main.followPosts.FollowingPostsActivity"
android:configChanges="orientation|screenSize"
android:label="#string/title_activity_following_posts"
android:theme="#style/AppCompat.NoActionBar" />
<activity
android:name=".main.search.SearchActivity"
android:configChanges="orientation|screenSize"
android:theme="#style/AppCompat.NoActionBar"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="#xml/searchable" />
</activity>
<meta-data
android:name="io.fabric.ApiKey"
android:value="84e05e27c9fcba7e1de6a47e355a1aa247264a46" />
<service android:name=".services.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".services.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
</application>
</manifest>
main activity
public class MainActivity extends BaseActivity<MainView, MainPresenter> implements MainView {
private PostsAdapter postsAdapter;
private RecyclerView recyclerView;
private FloatingActionButton floatingActionButton;
private TextView newPostsCounterTextView;
private boolean counterAnimationInProgress = false;
private ProgressBar progressBar;
private SwipeRefreshLayout swipeContainer;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initContentView();
}
#Override
protected void onResume() {
super.onResume();
presenter.updateNewPostCounter();
}
#NonNull
#Override
public MainPresenter createPresenter() {
if (presenter == null) {
return new MainPresenter(this);
}
return presenter;
}
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case ProfileActivity.CREATE_POST_FROM_PROFILE_REQUEST:
refreshPostList();
break;
case CreatePostActivity.CREATE_NEW_POST_REQUEST:
presenter.onPostCreated();
break;
case PostDetailsActivity.UPDATE_POST_REQUEST:
presenter.onPostUpdated(data);
break;
}
}
}
#Override
public void onBackPressed() {
attemptToExitIfRoot(floatingActionButton);
}
public void refreshPostList() {
postsAdapter.loadFirstPage();
if (postsAdapter.getItemCount() > 0) {
recyclerView.scrollToPosition(0);
}
}
#Override
public void removePost() {
postsAdapter.removeSelectedPost();
}
#Override
public void updatePost() {
postsAdapter.updateSelectedPost();
}
#Override
public void showCounterView(int count) {
AnimationUtils.showViewByScaleAndVisibility(newPostsCounterTextView);
String counterFormat = getResources().getQuantityString(R.plurals.new_posts_counter_format, count, count);
newPostsCounterTextView.setText(String.format(counterFormat, count));
}
private void initContentView() {
if (recyclerView == null) {
progressBar = findViewById(R.id.progressBar);
swipeContainer = findViewById(R.id.swipeContainer);
initFloatingActionButton();
initPostListRecyclerView();
initPostCounter();
}
}
private void initFloatingActionButton() {
floatingActionButton = findViewById(R.id.addNewPostFab);
if (floatingActionButton != null) {
floatingActionButton.setOnClickListener(v -> presenter.onCreatePostClickAction(floatingActionButton));
}
}
private void initPostListRecyclerView() {
recyclerView = findViewById(R.id.recycler_view);
postsAdapter = new PostsAdapter(this, swipeContainer);
postsAdapter.setCallback(new PostsAdapter.Callback() {
#Override
public void onItemClick(final Post post, final View view) {
presenter.onPostClicked(post, view);
}
#Override
public void onListLoadingFinished() {
progressBar.setVisibility(View.GONE);
}
#Override
public void onAuthorClick(String authorId, View view) {
openProfileActivity(authorId, view);
}
#Override
public void onCanceled(String message) {
progressBar.setVisibility(View.GONE);
showToast(message);
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
recyclerView.setAdapter(postsAdapter);
postsAdapter.loadFirstPage();
}
private void initPostCounter() {
newPostsCounterTextView = findViewById(R.id.newPostsCounterTextView);
newPostsCounterTextView.setOnClickListener(v -> refreshPostList());
presenter.initPostCounter();
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
#Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
hideCounterView();
super.onScrolled(recyclerView, dx, dy);
}
});
}
#Override
public void hideCounterView() {
if (!counterAnimationInProgress && newPostsCounterTextView.getVisibility() == View.VISIBLE) {
counterAnimationInProgress = true;
AlphaAnimation alphaAnimation = AnimationUtils.hideViewByAlpha(newPostsCounterTextView);
alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
#Override
public void onAnimationStart(Animation animation) {
}
#Override
public void onAnimationEnd(Animation animation) {
counterAnimationInProgress = false;
newPostsCounterTextView.setVisibility(View.GONE);
}
#Override
public void onAnimationRepeat(Animation animation) {
}
});
alphaAnimation.start();
}
}
#SuppressLint("RestrictedApi")
#Override
public void openPostDetailsActivity(Post post, View v) {
Intent intent = new Intent(MainActivity.this, PostDetailsActivity.class);
intent.putExtra(PostDetailsActivity.POST_ID_EXTRA_KEY, post.getId());
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
View imageView = v.findViewById(R.id.postImageView);
View authorImageView = v.findViewById(R.id.authorImageView);
ActivityOptions options = ActivityOptions.
makeSceneTransitionAnimation(MainActivity.this,
new android.util.Pair<>(imageView, getString(R.string.post_image_transition_name)),
new android.util.Pair<>(authorImageView, getString(R.string.post_author_image_transition_name))
);
startActivityForResult(intent, PostDetailsActivity.UPDATE_POST_REQUEST, options.toBundle());
} else {
startActivityForResult(intent, PostDetailsActivity.UPDATE_POST_REQUEST);
}
}
public void showFloatButtonRelatedSnackBar(int messageId) {
showSnackBar(floatingActionButton, messageId);
}
#Override
public void openCreatePostActivity() {
Intent intent = new Intent(this, CreatePostActivity.class);
startActivityForResult(intent, CreatePostActivity.CREATE_NEW_POST_REQUEST);
}
#SuppressLint("RestrictedApi")
#Override
public void openProfileActivity(String userId, View view) {
Intent intent = new Intent(MainActivity.this, ProfileActivity.class);
intent.putExtra(ProfileActivity.USER_ID_EXTRA_KEY, userId);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && view != null) {
View authorImageView = view.findViewById(R.id.authorImageView);
ActivityOptions options = ActivityOptions.
makeSceneTransitionAnimation(MainActivity.this,
new android.util.Pair<>(authorImageView, getString(R.string.post_author_image_transition_name)));
startActivityForResult(intent, ProfileActivity.CREATE_POST_FROM_PROFILE_REQUEST, options.toBundle());
} else {
startActivityForResult(intent, ProfileActivity.CREATE_POST_FROM_PROFILE_REQUEST);
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.profile:
presenter.onProfileMenuActionClicked();
return true;
case R.id.followingPosts:
Intent followingPosts = new Intent(this, FollowingPostsActivity.class);
startActivity(followingPosts);
return true;
case R.id.search:
Intent searchIntent = new Intent(this, SearchActivity.class);
startActivity(searchIntent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}

Activity refresh after change activity

I have 3 Activity. 1 - MainActivity , 2 - InfoActivity, 3 - ChangelogActivity.
If i am located on InfoActivity all is good (on InfoActivity placed ProgressBar) , if i go to ChangelogActivity and go back again to InfoActivity ProgressBar work fine, and his value not 0, but if i go to MainActivity from InfoActivity and go back, now ProgerssBar get value 0.
How i can fix it?
If need i can place some code here.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.teammt.gmanrainy.huaweifirmwarefinder">
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:supportsRtl="true"
android:theme="#style/AppTheme">
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden|uiMode">
android:screenOrientation="portrait"
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".FirmwareInfo"
android:configChanges="orientation|screenSize|keyboardHidden|uiMode"
android:screenOrientation="portrait" />
<activity
android:name=".FirmwareChangelog"
android:configChanges="orientation|screenSize|keyboardHidden|uiMode"
android:screenOrientation="portrait" />
<activity android:name=".SettingsActivity"
android:configChanges="orientation|screenSize|keyboardHidden|uiMode"
android:screenOrientation="portrait"></activity>
</application>
</manifest>
MainActivity Overrided Methods
//Действия во время созданиея MainActivity
#Override
protected void onCreate(Bundle savedInstanceState) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
//Конструктор Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Проверка прав
ActivityCompat.requestPermissions(this, PERMISSION_STRING_ARRAY, REQUEST_PERMISSION_PHONE_STATE);
//Инициализация
utils = new FFUtils();
gridView = (GridView) findViewById(R.id.firmware_grid_view);
//Установка модели в тайтл
if(deviceModel != null)
setTitle(deviceModel);
else
setTitle(getString(R.string.app_name));
///////////////////////////////////////
// Advanced listener блок
///////////////////////////////////////
//Клик по элементу GridView
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
try
{
System.out.println(lastFirmwares.get(position));
String[] lastFirmwareArray = lastFirmwares.get(position).split("\\|");
Intent intent = new Intent(getThis(), FirmwareInfo.class);
intent.putExtra("firmwareName",lastFirmwareArray[0]).
putExtra("firmwareType",lastFirmwareArray[1]).
putExtra("firmwareLink",lastFirmwareArray[2]).
putExtra("firmwareSize",lastFirmwareArray[3]).
putExtra("firmwareLastmod",lastFirmwareArray[4]).
putExtra("firmwareCount",lastFirmwares.size()).
putExtra("firmwareId",position);
startActivity(intent);
}
catch (Exception ex)
{
Log.e("GetFirmwarePosition",ex.getMessage());
}
}
});
}
#Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
#Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBundle("newBundy", newBundy);
}
#Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getBundle("newBundy");
}
//Действия после загрузки формы
#Override
protected void onStart() {
super.onStart();
getDelegate().onStart();
//Получаем список моделей
modelsList = utils.getModelsList(MODELSLIST_LINK);
//Получаем приведенную к общему виду модель
if(modelManuallyChanged == false)
deviceModel = utils.getDeviceModel(modelsList,utils.getDeviceFullModel());
//Добавляем модель в тайтл
setTitle(deviceModel);
}
InfoActivity Overrided Methods
//Действия во время созданиея FirmwareInfo
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_firmware_info);
this.setTitle("FirmwareInfo");
//Инициализация
utils = new FFUtils();
firmware_info_lastmod_textview = (TextView)findViewById(R.id.firmware_info_lastmod_textview);
firmware_info_size_textview = (TextView) findViewById(R.id.firmware_info_size_textview);
firmware_info_download_progressbar = (ProgressBar) findViewById(R.id.firmware_info_download_progressbar);
//firmware_info_download_progressbar.setProgress(0);
//Убираем тень
getSupportActionBar().setElevation(0);
}
#Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
#Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("progressbar_progress", firmware_info_download_progressbar.getProgress());
}
#Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
int progressbar_progress = savedInstanceState.getInt("progressbar_progress");
firmware_info_download_progressbar.setProgress(progressbar_progress);
}
//Действия после загрузки формы
#Override
protected void onStart() {
super.onStart();
getDelegate().onStart();
firmwareName = getIntent().getExtras().getString("firmwareName");
firmwareType = getIntent().getExtras().getString("firmwareType");
firmwareLink = getIntent().getExtras().getString("firmwareLink");
firmwareSize = getIntent().getExtras().getString("firmwareSize");
firmwareLastmod = getIntent().getExtras().getString("firmwareLastmod");
firmwareId = getIntent().getExtras().getInt("firmwareId");
firmwareCount = getIntent().getExtras().getInt("firmwareCount");
if(firmwareName != null)
{
setTitle(firmwareName + " " + firmwareType);
firmware_info_lastmod_textview.setText(getString(R.string.last_mod) + " " + firmwareLastmod);
firmware_info_size_textview.setText(getString(R.string.size) + " " + utils.convertToMegabyte(firmwareSize));
}
}
Changelog Overrided Methods
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_firmware_changelog);
//Инициализация
utils = new FFUtils();
firmware_changelog_view_model = (TextView)findViewById(R.id.firmware_changelog_view_model);
firmware_changelog_view_changelog = (TextView)findViewById(R.id.firmware_changelog_view_changelog);
firmware_changelog_view_changelog.setMovementMethod(new ScrollingMovementMethod());
//Убираем тень
getSupportActionBar().setElevation(0);
//Убираем Titile
getSupportActionBar().hide();
}
#Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}#Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBundle("newBundy", newBundy);
}
#Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getBundle("newBundy");
}
//Действия после загрузки формы
#Override
protected void onStart() {
super.onStart();
getDelegate().onStart();
firmwareName = getIntent().getExtras().getString("firmwareName");
firmwareType = getIntent().getExtras().getString("firmwareType");
firmwareLink = getIntent().getExtras().getString("firmwareLink");
firmwareSize = getIntent().getExtras().getString("firmwareSize");
firmwareLastmod = getIntent().getExtras().getString("firmwareLastmod");
firmware_changelog_view_model.setText(firmwareName);
Thread t = new Thread(new Runnable() {
#Override
public void run() {
try
{
//Получаем List со всеми строками feature из changelog
parsedChangelog = parseXmlString(prepareXpp(utils.getXmlFromUrl(firmwareLink.replace("update.zip","changelog.xml"))));
}
catch (Exception ex)
{
Log.e("Parse error",ex.getMessage());
}
StringBuilder sb = new StringBuilder();
for (String s : parsedChangelog)
{
sb.append(s);
sb.append("\t");
}
utils.universalSetText(firmware_changelog_view_changelog,sb.toString());
//firmware_changelog_view_changelog.setText(sb.toString());
}
});
t.start();
}

After Changing Manifest - Theme Error

I tried to change my Launcher Activity in my Manifest file. After changing it, I went reseted my code of again (re-edited so that it was the same as before). So I just copy pasted this code between my activities
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
After reseting my code the app won't open.
I got an error
java.lang.IllegalArgumentException: AppCompat does not support the current theme features, poiting out on my setContentView(R.layout.activity_main);
I got really frustrated by this problem cause I didn't change anything in my code (it is excaclty as it used to be when it was working)
Here is my manifest file code
<manifest package="com.inthessaloniki.cityguide"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="auto">
<!-- versionCode, versionName, minSdkVersion, targetSdkVersion properties are set via Gradle script -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<!-- allows the API to access Google web-based services -->
<!-- maps API needs OpenGL ES 2.0 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="false"/>
<!--
You can easily change the main theme. Just modify application.android:theme attribute.
There are 8 main themes you can use:
Theme.CityGuide.Blue
Theme.CityGuide.Brown
Theme.CityGuide.Carrot
Theme.CityGuide.Gray
Theme.CityGuide.Green
Theme.CityGuide.Indigo
Theme.CityGuide.Red
Theme.CityGuide.Yellow
Don't forget to modify also MainActivity's theme.
-->
<application
android:name=".CityGuideApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="#mipmap/ic_launcher"
android:label="#string/app_name"
android:theme="#style/Theme.CityGuide.Indigo"
tools:replace="android:icon">
<!--
Themes for MainActivity:
Theme.CityGuide.TransparentStatusBar.Blue
Theme.CityGuide.TransparentStatusBar.Brown
Theme.CityGuide.TransparentStatusBar.Carrot
Theme.CityGuide.TransparentStatusBar.Gray
Theme.CityGuide.TransparentStatusBar.Green
Theme.CityGuide.TransparentStatusBar.Indigo
Theme.CityGuide.TransparentStatusBar.Red
Theme.CityGuide.TransparentStatusBar.Yellow
-->
<activity
android:name=".activity.MainActivity"
android:label="#string/app_name"
android:theme="#style/Theme.CityGuide.TransparentStatusBar.Indigo"
android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activity.PoiDetailActivity"
android:label="#string/title_poi_detail"
android:launchMode="standard"/>
<activity
android:name=".activity.TourDetailActivity"
android:label="#string/title_tour_detail"
android:launchMode="standard"/>
<activity
android:name=".activity.MapActivity"
android:label="#string/title_map"
android:launchMode="standard"/>
<activity
tools:replace="android:configChanges"
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|uiMode|smallestScreenSize"/>
<activity
android:name=".activity.DescriptionDetailsActivity"
android:label="#string/title_activity_description_details"
android:theme="#style/Theme.CityGuide.TransparentStatusBar.Indigo">
</activity>
<activity
android:name=".activity.MailFormActivity"
android:label="#string/title_tour_detail"
android:theme="#style/Theme.CityGuide.TransparentStatusBar.Indigo">
</activity>
<provider
android:name=".content.PoiSearchRecentSuggestionsProvider"
android:authorities="com.inthessaloniki.cityguide.content.PoiSearchRecentSuggestionsProvider"
android:exported="false"/>
<meta-data
android:name="com.google.android.gms.version"
android:value="#integer/google_play_services_version"/>
<meta-data
android:name="com.google.android.gms.analytics.globalConfigResource"
android:resource="#xml/analytics_global_tracker"/>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="#string/maps_api_key"/>
</application>
Main Activity Code
public class MainActivity extends AppCompatActivity implements DrawerAdapter.CategoryViewHolder.OnItemClickListener, OnSearchListener
{
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private ScrimInsetsFrameLayout mDrawerScrimInsetsFrameLayout;
private DrawerAdapter mDrawerAdapter;
private CharSequence mTitle;
private CharSequence mDrawerTitle;
private List<CategoryModel> mCategoryList;
public static Intent newIntent(Context context)
{
Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
return intent;
}
#Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupActionBar();
setupRecyclerView();
setupDrawer(savedInstanceState);
// init analytics tracker
((CityGuideApplication) getApplication()).getTracker();
}
#Override
public void onStart()
{
super.onStart();
// analytics
GoogleAnalytics.getInstance(this).reportActivityStart(this);
}
#Override
public void onResume()
{
super.onResume();
}
#Override
public void onPause()
{
super.onPause();
}
#Override
public void onStop()
{
super.onStop();
// analytics
GoogleAnalytics.getInstance(this).reportActivityStop(this);
}
#Override
public void onDestroy()
{
super.onDestroy();
}
#Override
public boolean onOptionsItemSelected(MenuItem item)
{
// open or close the drawer if home button is pressed
if(mDrawerToggle.onOptionsItemSelected(item))
{
return true;
}
// action bar menu behaviour
switch(item.getItemId())
{
default:
return super.onOptionsItemSelected(item);
}
}
#Override
protected void onPostCreate(Bundle savedInstanceState)
{
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
#Override
public void onConfigurationChanged(Configuration newConfiguration)
{
super.onConfigurationChanged(newConfiguration);
mDrawerToggle.onConfigurationChanged(newConfiguration);
}
#Override
public void setTitle(CharSequence title)
{
mTitle = title;
getSupportActionBar().setTitle("");
Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/nexa-bold.otf");
final TextView toolbarName = (TextView) findViewById(R.id.toolbar_title);
toolbarName.setText(mTitle);
}
#Override
public void onItemClick(View view, int position, long id, int viewType)
{
// position
int categoryPosition = mDrawerAdapter.getCategoryPosition(position);
selectDrawerItem(categoryPosition);
}
#Override
public void onSearch(String query)
{
Fragment fragment = PoiListFragment.newInstance(query);
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.activity_main_container, fragment).commitAllowingStateLoss();
mDrawerAdapter.setSelected(mDrawerAdapter.getRecyclerPositionByCategory(0));
setTitle(getString(R.string.title_search) + ": " + query);
}
private void setupActionBar()
{
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar bar = getSupportActionBar();
bar.setDisplayUseLogoEnabled(false);
bar.setDisplayShowTitleEnabled(true);
bar.setDisplayShowHomeEnabled(true);
bar.setDisplayHomeAsUpEnabled(true);
bar.setHomeButtonEnabled(true);
}
private void setupRecyclerView()
{
// reference
RecyclerView recyclerView = getRecyclerView();
// set layout manager
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
// load categories from database
loadCategoryList();
// set adapter
if(recyclerView.getAdapter()==null)
{
// create adapter
mDrawerAdapter = new DrawerAdapter(mCategoryList, this);
}
else
{
// refill adapter
mDrawerAdapter.refill(mCategoryList, this);
}
recyclerView.setAdapter(mDrawerAdapter);
// add decoration
List<Integer> dividerPositions = new ArrayList<>();
dividerPositions.add(3);
RecyclerView.ItemDecoration itemDecoration = new DrawerDividerItemDecoration(
this,
null,
dividerPositions,
getResources().getDimensionPixelSize(R.dimen.global_spacing_xxs));
recyclerView.addItemDecoration(itemDecoration);
}
private void setupDrawer(Bundle savedInstanceState)
{
mTitle = getTitle();
mDrawerTitle = getTitle();
Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/nexa-bold.otf");
final TextView toolbarName = (TextView) findViewById(R.id.toolbar_title);
toolbarName.setText(mTitle);
toolbarName.setTypeface(typeface);
// reference
mDrawerLayout = (DrawerLayout) findViewById(R.id.activity_main_layout);
mDrawerScrimInsetsFrameLayout = (ScrimInsetsFrameLayout) findViewById(R.id.activity_main_drawer);
// set drawer
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
mDrawerLayout.setStatusBarBackgroundColor(ResourcesHelper.getValueOfAttribute(this, R.attr.colorPrimaryDark));
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close)
{
#Override
public void onDrawerClosed(View view)
{
toolbarName.setText(mTitle);
getSupportActionBar().setTitle("");
supportInvalidateOptionsMenu();
}
#Override
public void onDrawerOpened(View drawerView)
{
toolbarName.setText(mTitle);
getSupportActionBar().setTitle("");
supportInvalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
// show initial fragment
if(savedInstanceState == null)
{
selectDrawerItem(0);
}
}
private void selectDrawerItem(int position)
{
long mCategoryId = mCategoryList.get(position).getId();
Fragment fragment = null;
if(mCategoryId==PoiListFragment.CATEGORY_ID_ALL || mCategoryId==PoiListFragment.CATEGORY_ID_FAVORITES ){
fragment = PoiListFragment.newInstance(mCategoryId);
}else{
fragment = SubCategoryListFragment.newInstance(mCategoryId);
}
FragmentManager fragmentManager = getSupportFragmentManager();
String categoryName = mCategoryList.get(position).getName();
fragmentManager.beginTransaction().replace(R.id.activity_main_container, fragment, categoryName).addToBackStack(categoryName).commitAllowingStateLoss();
mDrawerAdapter.setSelected(mDrawerAdapter.getRecyclerPositionByCategory(position));
setTitle(categoryName);
mDrawerLayout.closeDrawer(mDrawerScrimInsetsFrameLayout);
}
public void showPOIFragment(long categoryId, String categoryName){
PoiListFragment fragment = PoiListFragment.newInstance(categoryId);
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.activity_main_container, fragment, categoryName).addToBackStack(categoryName).commitAllowingStateLoss();
if (!TextUtils.isEmpty(categoryName)){
setTitle(categoryName);
}
}
public void showSubCategoryFragment(long categoryId, String categoryName){
SubCategoryListFragment fragment = SubCategoryListFragment.newInstance(categoryId);
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.activity_main_container, fragment, categoryName).addToBackStack(categoryName).commitAllowingStateLoss();
if (!TextUtils.isEmpty(categoryName)){
setTitle(categoryName);
}
}
private void loadCategoryList()
{
try
{
mCategoryList = CategoryDAO.readAll(-1l, -1l);
}
catch(SQLException e)
{
e.printStackTrace();
}
CategoryModel Thessaloniki = new CategoryModel();
Thessaloniki.setId(PoiListFragment.CATEGORY_ID_THESSALONIKI);
Thessaloniki.setName("Thessaloniki");
Thessaloniki.setImage("drawable://" + R.drawable.ic_category_all);
CategoryModel all = new CategoryModel();
all.setId(PoiListFragment.CATEGORY_ID_ALL);
all.setName(getResources().getString(R.string.drawer_category_all));
all.setImage("drawable://" + R.drawable.ic_category_all);
CategoryModel favorites = new CategoryModel();
favorites.setId(PoiListFragment.CATEGORY_ID_FAVORITES);
favorites.setName(getResources().getString(R.string.drawer_category_favorites));
favorites.setImage("drawable://" + R.drawable.ic_category_favorites);
mCategoryList.add(0,Thessaloniki);
mCategoryList.add(1, all);
mCategoryList.add(2, favorites);
}
private RecyclerView getRecyclerView()
{
return (RecyclerView) findViewById(R.id.activity_main_drawer_recycler);
}
#Override
public void onBackPressed() {
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 1) {
finish();
}else{
getSupportFragmentManager().popBackStack();
String name = getSupportFragmentManager().getBackStackEntryAt(count-2).getName();
setTitle(name);
}
// super.onBackPressed();
}
}
I had face similar issue when i had firstly created project in android stdio with API 23 so for fixing these issue try to do some changes.
Please change your activity code first line :-
public class MainActivity extends AppCompatActivity
to these :-
public class MainActivity extends Activity
It had worked for me when i was in same problem.

Quickblox: Sample won' start

So i am trying to run the Quickblox sample chat and XMPP Sample Chat.
Im using Eclipse with the newest Android sdk/build.
After importing the sample, the way the Quickblox guide tells, i had a few errors in the in the code, but not much more than a few imports missing, but when im trying to run the app i get an error, the app installs correct but right after errors starts popping in on Logcat.
public class SplashActivity extends Activity implements QBCallback {
private static final String APP_ID = "6445";
private static final String AUTH_KEY = "9a4bnSXbP-KN9G8";
private static final String AUTH_SECRET = "FwunQpKdkE2e7AJ";
private ProgressBar progressBar;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
QBSettings.getInstance().fastConfigInit(APP_ID, AUTH_KEY, AUTH_SECRET);
QBAuth.createSession(this);
}
#Override
public void onComplete(Result result) {
progressBar.setVisibility(View.GONE);
if (result.isSuccess()) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
} else {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setMessage("Error(s) occurred. Look into DDMS log for details, " +
"please. Errors: " + result.getErrors()).create().show();
}
}
#Override
public void onComplete(Result result, Object context)
{
}
}
public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {
private static final int AUTHENTICATION_REQUEST = 1;
private static final int POSITION_USER = 0;
private static final int POSITION_ROOM = 1;
private SectionsPagerAdapter sectionsPagerAdapter;
private ViewPager viewPager;
private Action lastAction;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
List<Fragment> tabs = new ArrayList<Fragment>();
tabs.add(UsersFragment.getInstance());
tabs.add(RoomsFragment.getInstance());
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), tabs);
viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(sectionsPagerAdapter);
viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
#Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < sectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab()
.setText(sectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
}
#Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
int position = tab.getPosition();
QBUser qbUser = ((App) getApplication()).getQbUser();
if (qbUser != null) {
viewPager.setCurrentItem(position);
} else if (position == POSITION_ROOM) {
lastAction = Action.ROOM_LIST;
showAuthenticateDialog();
}
}
#Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
#Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (lastAction) {
case CHAT:
((UsersFragment) sectionsPagerAdapter.getItem(POSITION_USER)).startChat();
break;
case ROOM_LIST:
viewPager.setCurrentItem(POSITION_ROOM);
break;
}
((RoomsFragment) sectionsPagerAdapter.getItem(POSITION_ROOM)).loadRooms();
} else {
showUsersFragment();
}
}
private void showUsersFragment() {
getSupportActionBar().selectTab(getSupportActionBar().getTabAt(POSITION_USER));
viewPager.setCurrentItem(POSITION_USER);
}
public void setLastAction(Action lastAction) {
this.lastAction = lastAction;
}
public void showAuthenticateDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Authorize first");
builder.setItems(new String[]{"Login", "Register"}, new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivityForResult(intent, AUTHENTICATION_REQUEST);
break;
case 1:
intent = new Intent(MainActivity.this, RegistrationActivity.class);
startActivityForResult(intent, AUTHENTICATION_REQUEST);
break;
}
}
});
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
#Override
public void onCancel(DialogInterface dialog) {
showUsersFragment();
}
});
builder.show();
}
public static enum Action {CHAT, ROOM_LIST}
public static class SectionsPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public SectionsPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
#Override
public Fragment getItem(int position) {
return fragments.get(position);
}
#Override
public int getCount() {
return fragments.size();
}
#Override
public CharSequence getPageTitle(int position) {
switch (position) {
case POSITION_USER:
return "Users";
case POSITION_ROOM:
return "Rooms";
}
return null;
}
}}
My manifest file is:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.quickblox.sample.chat"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".App"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme" >
<activity
android:name="com.quickblox.sample.chat.ui.activities.SplashActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="#string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.activities.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAINMENU" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".ui.activities.ChatActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name=".ui.activities.LoginActivity"
android:label="Login" />
<activity
android:name=".ui.activities.RegistrationActivity"
android:label="Registration" />
</application>
</manifest>
This is my error message:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.quickblox.sample.chat/com.quickblox.sample.chat.ui.activities.SplashActivity}: java.lang.ClassNotFoundException: com.quickblox.sample.chat.ui.activities.SplashActivity
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983)
Open Properties->Java Build Path->Order and Export and check QB jar library. According to logs you haven't added it to the build.
1) First of all make sure that you have imported "quickblox-android-1.2.2.jar" which comes with QuickBlox SDK in folder named jar then just Right click on project -> Properties -> Got to Java Build Path -> Order and Export -> just check quickblox-android-1.2.2.jar(which is unchecked in list) -> click Ok.
2)Just Clean the project and run it.
Note:- If you do not clean the project after step 1 then project will crash so clean the project before running it.

Categories