Gson desserializa ponteiro nulo no apk lançado
Estou escrevendo que um aplicativo Android precisa usar o gson para desserializar a string json:
{
"reply_code": 001,
"userinfo": {
"username": "002",
"userip": 003
}
}
então eu crio duas classes:
public class ReturnData {
public String reply_code;
public userinfo userinfo;
}
public class userinfo {
public String username;
public String userip;
}
finalmente, meu código Java em MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context context= MainActivity.this;
//Test JSON
String JSON="{\"reply_code\": 001,\"userinfo\": {\"username\": \"002\",\"userip\": 003}}";
Gson gson = new Gson();
ReturnData returnData=gson.fromJson(JSON,ReturnData.class);
if(returnData.reply_code==null)
Toast.makeText(context,"isNULL",Toast.LENGTH_SHORT).show();
else
Toast.makeText(context,"notNULL",Toast.LENGTH_SHORT).show();
}
O que me deixou confuso é que, quando depuro o aplicativo, ele correu bem e gera "notNULL". Posso ver que todas as atribuições do objeto foram desserializadas corretamente. No entanto, quando eu criei o apk liberado do Android Studio e execute o apk no telefone, ele exibiu "isNULL", a resolução do json falhou!
Quem pode me dizer o que aconteceu ?!
PS: build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "19.1"
defaultConfig {
applicationId "com.padeoe.autoconnect"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "2.1.4"
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile files('src/gson-2.3.1.jar')
}