2016-08-16 7 views
1

を使用しているとき、私はインターネットからの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)  
+1

終わっスタックトレース –

+0

せずにヘルプを提供するのは難しいだろうが、スタックトレースはまだ – BigKangu

+0

あなたのコードが正しく構成されている...難読化されています。このサンプルの設定を見てください。以前の 'try'ブロックの成功に依存するコードは、その' try'ブロックの中になければなりません。現在、URLを取得できない場合は、JSONコードを実行します。このようなコードは書かないでください。 – EJP

答えて