react-native-exception-handler icon indicating copy to clipboard operation
react-native-exception-handler copied to clipboard

How to hit api when modifying Android Native Exception handler

Open iozeen opened this issue 6 years ago • 0 comments
trafficstars

Hi. I want to report native error to google's stackdriver. I've searched through issues and found out that I have to override native handler in MainApplication.java. I don't know java but with google's help I wrote this:

...
import com.masteratul.exceptionhandler.ReactNativeExceptionHandlerModule;
import com.masteratul.exceptionhandler.NativeExceptionHandlerIfc
...

public class MainApplication extends Application implements ReactApplication {

  public String executePost(String targetURL,String urlParameters) {
    int timeout=5000;
    URL url;
    HttpURLConnection connection = null;
    try {
        // Create connection
        url = new URL(targetURL);
        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type",
                "application/json");

        connection.setRequestProperty("Content-Length",
                "" + Integer.toString(urlParameters.getBytes().length));
        connection.setRequestProperty("Content-Language", "en-US");

        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setConnectTimeout(timeout);
        connection.setReadTimeout(timeout);

        // Send request
        DataOutputStream wr = new DataOutputStream(
                connection.getOutputStream());
        wr.writeBytes(urlParameters);
        wr.flush();
        wr.close();

        // Get Response
        InputStream is = connection.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        String line;
        StringBuffer response = new StringBuffer();
        while ((line = rd.readLine()) != null) {
            response.append(line);
            response.append('\r');
        }
        rd.close();
        return response.toString();
    } catch (SocketTimeoutException e) {
      e.printStackTrace();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (UnknownHostException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {

        if (connection != null) {
            connection.disconnect();
        }
    }
    return null;
  }
  
  ...

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
    long size = 200L * 1024L * 1024L;
    com.facebook.react.modules.storage.ReactDatabaseSupplier.getInstance(getApplicationContext()).setMaximumSize(size);

    ReactNativeExceptionHandlerModule.setNativeExceptionHandler(new NativeExceptionHandlerIfc() {
      @Override
      public void handleNativeException(Thread thread, Throwable throwable, Thread.UncaughtExceptionHandler originalHandler) {
        String path = "...";
        executePost(path, new String("{'stuff': 1}"));
      }
    });//This will override the default behaviour of displaying the recover activity.
  }
}

I'm almost sure executePost method works fine. But when the error raises my app just freezes and no error sent to api. It seems like I'm missing some activities code. Any help appreciated.

iozeen avatar Dec 14 '18 20:12 iozeen