Posts

Showing posts with the label Java

How a JPA save() Call Silently Overwrote My Data (and How to Fix It)

Image
How a JPA save() Call Silently Overwrote My Data (and How to Fix It) I recently encountered a subtle but dangerous issue in a Spring Boot + JPA application. There were no errors, no exceptions, and no failed transactions — yet a database column was silently overwritten with NULL . If you are using Spring Data JPA and updating the same table from multiple endpoints, this is something you should be aware of. The Simplified Scenario We had two REST endpoints updating the same entity, but different fields. The code below is simplified and mangled for illustration. Endpoint A – updates an external reference EntityX entity = repository.findByKey(refId); // update external reference entity.setExternalRef("ABC123"); repository.save(entity); Endpoint B – updates customer email EntityX entity = repository.findByKey(refId); // update email only entity.setEmail("user@example.com"); repository.save(entity); The assumption was that Endpoint B would ...

Android java: How to display phonetic symbol with correct fonts via WebView ?

Image
First, Download lingoes font file Android default fonts can not display phonetic symbol. lingoes.ttf can, please download it. Second, Put lingoes.ttf to assets/font Last, Add "lingoes" font-family in css files under assets @font-face { font-family: 'lingoes'; src:url('file:///android_asset/fonts/lingoes.ttf') format('truetype'); font-weight: normal; font-style: normal; } Use "lingoes" as font-family for the phonetic symbol content Android java : How to load html files in assets via WebView?

Android java : How to load html files in assets via WebView?

Image
The base url for html files under the assets of your app is "file:///android_asset/" WebView wv = new WebView(context); wv.getSettings().setJavaScriptEnabled(true); wv.loadUrl("file:///android_asset/coca/coca_00001_the.html");

Android java : How to copy/move file from assets to absolute path?

private void moveAssets(String assets_file_path, String absolutePath) throws IOException { File wwwFile = new File(absolutePath); if (wwwFile.exists()) return; InputStream is = activity.getAssets().open(assets_file_path); byte[] buffer = new byte[is.available()]; is.read(buffer); is.close(); wwwFile.createNewFile(); FileOutputStream os = new FileOutputStream(wwwFile); os.write(buffer); os.close(); }

Android java: How to orientation activity layout automatically ?

Add ~ android:screenOrientation="fullSensor" ~ to the activity AndroidManifest.xml activity android:name=".MainActivity" android:screenOrientation="fullSensor"

Android how to detect/register language/locale change listener/receiver

The easy way is to register a BroadcastReceiver for Intent.ACTION_LOCALE_CHANGED . Example: change your ViewModel data when language/locale changed. public class QASViewModel extends ViewModel { @SuppressLint ( "StaticFieldLeak" ) private final FragmentActivity activity ; public QASViewModel ( @NonNull FragmentActivity activity ) { this . activity = activity ; setLangReceiver (); } private void setLangReceiver () { final QASViewModel qasViewModel = this ; final BroadcastReceiver langReceiver = new BroadcastReceiver () { @Override public void onReceive ( Context context , Intent intent ) { // do action when language change } }; activity . getApplicationContext (). registerReceiver ( langReceiver , new IntentFilter ( Intent . ACTION_LOCALE_CHANGED )); } }

Android ViewModel with ArgsConstructor via Custom ViewModelFactory

Android ViewModel is very useful. However ViewModel has no args constructor by default. Typical usage of ViewModel looks like: public class UserModel extends ViewModel { } final UserModel viewModel = ViewModelProviders . of ( this ). get ( UserModel . class ); Let's look the definition of ViewModelProviders.of method. /** * Creates a {@link ViewModelProvider}, which retains ViewModels while a scope of given Activity * is alive. More detailed explanation is in {@link ViewModel}. * * It uses the given {@link Factory} to instantiate new ViewModels. * * @param activity an activity, in whose scope ViewModels should be retained * @param factory a {@code Factory} to instantiate new ViewModels * @return a ViewModelProvider instance */ @NonNull @MainThread public static ViewModelProvider of ( @NonNull FragmentActivity activity , @Nullable Factory factory ) { Have you found it? We can pas...

How to convert UTC Date Time String to Java object and compare it ?

Use java.time.Instant ; import java.time.Instant; Instant instantStart = Instant.parse("20200229T12:00:00Z"); Instant instantEnd = Instant.parse("20200329T12:00:00Z"); Instant instantNow = Instant.now(); return instantNow.isAfter(instantStart) && instantNow.isBefore(instantEnd);

How to convert json array to java Object

Use com.amazonaws.util.json.Jackson import com.amazonaws.util.json.Jackson; import java.util.ArrayList; import lombok.Data; @Data class DeviceList { private ArrayList<String> devices; } DeviceList deviceList = Jackson.fromJsonString( "{\"devices\":[\"Mobile\", \"Desktop\"]}", DeviceList.class);

Java Spring Bean constructor how to get call stack, backtrace

Easy wasy to print Java call stack or backtrace: Implement a function and throw an Exception. Call the function in the place you want to know its backtrace or callstack And Catch the Exception then Call Exception.getStackTrace class MyService { public static void f() throws Exception { throw new Exception(); } void forTest() { try { f(); } catch (Exception e) { e.printStackTrace(); } } } Via this solution, we can get Bean constructor call stack easily. [tomcat:launchProperties] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [tomcat:launchProperties] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [tomcat:launchProperties] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [tomcat:launchProperties] at java.lang.reflect.Method.invoke(Method.java:498) [tomcat:launchProperties] at org.sprin...

How to use @Mock @InjectMocks

class MyService { private UserDao userDao; } import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.runners.MockitoJUnitRunner; public class MyServiceTest { @InjectMocks private MyService myService; @Mock private UserDao userDao; @Before public void setUp() { myService = new MyService(); } } Cannot mock/spy class java.lang.String Mockito cannot mock/spy following: - final classes - anonymous classes - primitive types org.mockito.exceptions.base.MockitoException: Cannot mock/spy class java.lang.String Mockito cannot mock/spy following: - final classes - anonymous classes - primitive types at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl$1.withBefores(JUnit45AndHigherRunnerImpl.java:27) at org.mockito.internal.runners.JUnit45AndHigher...

set up java spring boot "hello world" web application on ubuntu from zero.

Image
install JDK 8 $ sudo apt-get install openjdk-8-jdk install Gradle $ curl -s " https://get.sdkman.io " | bash $ source "$HOME/.sdkman/bin/sdkman-init.sh" $ sdk install gradle 5.1.1 Spring Initializr start.spring.io get your "demo.zip" and unzip it. choose "Gradle Project", please remember add "Web" as dependence, otherwise there will be compile errors. Create a simple web application $ cat src/main/java/com/example/demo/HelloController.java package com.example.demo; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; @RestController public class HelloController { @RequestMapping("/") public String index() { return "Greetings from Spring Boot!"; } } Run the Application $ ./gradlew bootRun Check out the service. $ curl localhost:8080 Greetings from Spring Boot! Generate IDE profile add two pl...