Facebook 调试工具Stetho配置入门

I decided to spend a few hours on Stetho.
Stetho is a sophisticated debug bridge for Android applications.

How to enable it
It is very simple to enable Stetho.
Just add these lines to your build.gradle:


dependencies {
    // Stetho core
    compile 'com.facebook.stetho:stetho:1.1.1'

    //If you want to add a network helper
    compile 'com.facebook.stetho:stetho-okhttp:1.1.1'
}

Then in your Application you can enable the tool just adding: 

Stetho.initialize(
                    Stetho.newInitializerBuilder(this)
                            .enableDumpapp(
                                    Stetho.defaultDumperPluginsProvider(this))
                            .enableWebKitInspector(
                                    Stetho.defaultInspectorModulesProvider(this))
                            .build());

In my simple application, I have a network call with okhttp-client , a simple value in the shared preferences, and a small db with one table.
Now the last step: Run the application and just open Chrome on your pc (where the device is plugged). 
In your chrome just navigate on chrome://inspect 
Facebook 调试工具Stetho配置入门
As you can see in the image you can see 2 apps running in my device (I love Nexus4 for this kind of tests....)

  • Chrome
  • My Stetho Test App

How can I use it
Here you can open a magical world...clicking the inspect link.

First of all you can see the elements tab.

Facebook 调试工具Stetho配置入门
Here you can navigate in the elements inside your Activity......
Here a first surprise...clicking on the entry on the tab, the element is highlighted on the device !
Facebook 调试工具Stetho配置入门 
The network tab. 
If you work with the Chrome Developer Tools, you know it very well. Here you can see the network calls with their data.
In my app I do a simple call with okhttp

  OkHttpClient client = new OkHttpClient();
        client.networkInterceptors().add(new StethoInterceptor());

        Request request = new Request.Builder()
                .url("https://google.com")
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
                //do something
            }

            @Override
            public void onResponse(Response response) throws IOException {
                //do something
            }
        });

Here the tab:
Facebook 调试工具Stetho配置入门
The Resources tab.
In my sample app I am setting a simple value in the SharedPreferences.

 SharedPreferences.Editor editor = getSharedPreferences("TEST", MODE_PRIVATE).edit();
        editor.putString("name", "Paolo");
        editor.putInt("idName", 12);
        editor.commit();

You can check this value in the navigating in the Local Storage entry.
Facebook 调试工具Stetho配置入门
Also I use a simple SQLiteOpenHelper to manage a very small database with just a table.

private static final String CREATE_DATABASE = "CREATE TABLE " + TBL_USR + " ( " +
            TBL_USR_CLMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
            TBL_USR_CLMN_NAME + " TEXT NOT NULL, " +
            TBL_USR_CLMN_SURNAME + " TEXT NOT NULL, " +
            TBL_USR_CLMN_CODE + " INTEGER NOT NULL DEFAULT 0 " +
            ")";

@Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(CREATE_DATABASE);
        db.execSQL("INSERT INTO " + TBL_USR + " " + "("+ TBL_USR_CLMN_NAME  +" , " + TBL_USR_CLMN_SURNAME +" , " + TBL_USR_CLMN_CODE  +")" + "  VALUES('PAOLO1','ROSSI1', 233432 )");
        db.execSQL("INSERT INTO " + TBL_USR + " " + "("+ TBL_USR_CLMN_NAME  +" , " + TBL_USR_CLMN_SURNAME +" , " + TBL_USR_CLMN_CODE  +")" + "  VALUES('PAOLO2','ROSSI2', 103213 )");
        db.execSQL("INSERT INTO " + TBL_USR + " " + "("+ TBL_USR_CLMN_NAME  +" , " + TBL_USR_CLMN_SURNAME +" , " + TBL_USR_CLMN_CODE  +")" + "  VALUES('PAOLO3','ROSSI3', 5454331 )");
        db.execSQL("INSERT INTO " + TBL_USR + " " + "("+ TBL_USR_CLMN_NAME  +" , " + TBL_USR_CLMN_SURNAME +" , " + TBL_USR_CLMN_CODE  +")" + "  VALUES('PAOLO4','ROSSI4', 5454444 )");
        db.execSQL("INSERT INTO " + TBL_USR + " " + "("+ TBL_USR_CLMN_NAME  +" , " + TBL_USR_CLMN_SURNAME +" , " + TBL_USR_CLMN_CODE  +")" + "  VALUES('PAOLO5','ROSSI5', 1231232 )");
        db.execSQL("INSERT INTO " + TBL_USR + " " + "("