を使用しているとき、私はインターネットからのJSONファイルを解析するには、このコードを持っている:私はすべての問題を見ることができないJavaNullPointerException ProGuardの
class getOnlineFeesInfo extends AsyncTask<URL, Integer, Long> {
public String feesJsonString;
protected Long doInBackground(URL... urls) {
String language = Locale.getDefault().getLanguage();
long state = 0;
HttpURLConnection c = null;
try {
String url = "http://www.myweb.com/api/fees_" + language + ".json";
URL u = new URL(url);
c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setRequestProperty("Content-length", "0");
c.setUseCaches(false);
c.setAllowUserInteraction(false);
c.setConnectTimeout(100000);
c.setReadTimeout(100000);
c.connect();
int status = c.getResponseCode();
switch (status) {
case 200:
case 201:
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
feesJsonString = sb.toString();
try {
System.out.println("Reading JSON from a file");
System.out.println("----------------------------");
JsonReader reader = new JsonReader(new StringReader(feesJsonString));
Gson gson = new GsonBuilder().create();
feesJson parser = gson.fromJson(reader, feesJson.class);
parser.setData();
for (String[] miniRecargasArray : Global.recargasArray) {
System.out.println(miniRecargasArray[0]);
}
for (String[] miniOficinasArray : Global.oficinasArray) {
System.out.println(miniOficinasArray[0]);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (MalformedURLException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} finally {
if (c != null) {
try {
c.disconnect();
} catch (Exception ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
}
}
state = 1;
return state;
}
}
...そして、それは私がProGuardのは(リリースを有効にし、実行時にしている場合にのみクラッシュバリエーション)は、デバッグモードで実行するとしません。理由を理解するのを助けてください。ありがとう!
** EDIT:
# Add project specific ProGuard rules here.
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
##---------------End: proguard configuration for Gson ----------
:追加されましたスタックトレースとproguard-rules.pro **
Proguaard-rules.proは、私は、スタックトレースに同じ難読化されたクラスを持っているので、動作していないよう
スタックトレース:
08-17 01:37:31.974 31900-32075/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.packageName.app
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at com.packageName.app.ab.a(Unknown Source)
at com.packageName.app.ac.a(Unknown Source)
at com.packageName.app.ac.doInBackground(Unknown Source)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
終わっスタックトレース –
せずにヘルプを提供するのは難しいだろうが、スタックトレースはまだ – BigKangu
あなたのコードが正しく構成されている...難読化されています。このサンプルの設定を見てください。以前の 'try'ブロックの成功に依存するコードは、その' try'ブロックの中になければなりません。現在、URLを取得できない場合は、JSONコードを実行します。このようなコードは書かないでください。 – EJP