Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ProGuard时的JavaNullPointerException_Java_Android - Fatal编程技术网

使用ProGuard时的JavaNullPointerException

使用ProGuard时的JavaNullPointerException,java,android,Java,Android,我有以下代码来解析来自Internet的JSON文件: class getOnlineFeesInfo extends AsyncTask<URL, Integer, Long> { public String feesJsonString; protected Long doInBackground(URL... urls) { String language = Locale.getDefault().getLanguage(); long state = 0;

我有以下代码来解析来自Internet的JSON文件:

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;
    }
}
堆栈跟踪:

    # 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  ----------
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) 

似乎您需要为gson配置proguard。查看此示例配置:

如果没有StackTraceOne,很难提供帮助,但是堆栈跟踪仍然是模糊的……您的代码结构不正确。取决于先前try块成功与否的代码应位于该try块内。目前,如果获取URL失败,您仍然会执行JSON代码。不要编写这样的代码。@EJP已更改,但我认为它不是重复的,因为它只有在启用proguard时才会崩溃,尽管我已经将其设置为使用gson,正如我所发布的那样。我理解什么是JNPE,但我认为这是一个不同的问题。谢谢,但我已经设置好了,没有任何改变。。。