Gson输出com.google.gson.JsonSyntaxException:java.io.EOFException:第1行第501列的输入结束

50

我一直在使用Gson在API中解析JSON,以在我的应用中使用。这是JSON输出的示例:

{"getdashboarddata":{"version":"1.0.0","runtime":492.3939704895,"data":{"raw":{"personal":{"hashrate":0},"pool":{"hashrate":1705841},"network":{"hashrate":41430764.301,"esttimeperblock":94.464466565347,"nextdifficulty":578.78109116,"blocksuntildiffchange":1}},"personal":{"hashrate":0,"sharerate":"0.0000","sharedifficulty":0,"shares":{"valid":0,"invalid":0,"invalid_percent":0,"unpaid":0},"estimates":{"block":0,"fee":0,"donation":0,"payout":0}},"pool":{"info":{"name":"RAPIDHASH","currency":"DOGE"},"workers":2199,"hashrate":1.705841,"shares":{"valid":1866290,"invalid":15564,"invalid_percent":0.83,"estimated":1866214,"progress":100},"price":"0.00000073","difficulty":32,"target_bits":21},"system":{"load":[0.1,0.25,0.29]},"network":{"hashrate":41.430764301,"difficulty":911.23745057,"block":235378,"esttimeperblock":94.46,"nextdifficulty":578.78109116,"blocksuntildiffchange":1}}}}

这是logcat:

05-25 17:12:00.230  24143-24159/io.kd.figgycity50.mpos.mposchecker E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: io.kd.figgycity50.mpos.mposchecker, PID: 24143
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: com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 501
        at com.google.gson.Gson.fromJson(Gson.java:813)
        at com.google.gson.Gson.fromJson(Gson.java:768)
        at com.google.gson.Gson.fromJson(Gson.java:717)
        at com.google.gson.Gson.fromJson(Gson.java:689)
        at io.kd.figgycity50.mpos.mposchecker.MainActivity$DownloadWebpageTask.doInBackground(MainActivity.java:77)
        at io.kd.figgycity50.mpos.mposchecker.MainActivity$DownloadWebpageTask.doInBackground(MainActivity.java:64)
        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)
 Caused by: java.io.EOFException: End of input at line 1 column 501
        at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1377)
        at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:471)
        at com.google.gson.stream.JsonReader.skipValue(JsonReader.java:1209)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:170)
        at com.google.gson.Gson.fromJson(Gson.java:803)
            at com.google.gson.Gson.fromJson(Gson.java:768)
            at com.google.gson.Gson.fromJson(Gson.java:717)
            at com.google.gson.Gson.fromJson(Gson.java:689)
            at io.kd.figgycity50.mpos.mposchecker.MainActivity$DownloadWebpageTask.doInBackground(MainActivity.java:77)
            at io.kd.figgycity50.mpos.mposchecker.MainActivity$DownloadWebpageTask.doInBackground(MainActivity.java:64)
            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)

这是获取和解析JSON的代码:

private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

            // params comes from the execute() call: params[0] is the url.
            String resp = null;
            try {
                resp =  downloadUrl(urls[0]);
            } catch (IOException e) {
                resp = "{\"getdashboarddata\":{\"data\":{\"personal\":{\"hashrate\":0},\"pool\":{\"info\":{\"name\":\"SET POOL IN SETTINGS\",\"currency\":\"???\"},\"hashrate\":0,\"difficulty\":0},\"network\":{\"hashrate\":0,\"difficulty\":0}}}}";
            }
            Gson gson = new Gson();
            Log.d("INFO", resp);
            MPOSDashStruct data = gson.fromJson(resp, MPOSDashStruct.class);
            TextView t = (TextView)findViewById(R.id.poolName);
            TextView t2 = (TextView)findViewById(R.id.khashMe);
            TextView t3 = (TextView)findViewById(R.id.khashPool);
            TextView t4 = (TextView)findViewById(R.id.khashNet);
            t.setText(data.getName());
            t2.setText(data.getMyHash());
            t3.setText(data.getPoolHash());
            t4.setText(data.getNetHash());
            return "Hello World. If you see this, you probably hack. Get out.";
        }

        private String downloadUrl(String myurl) throws IOException {
            InputStream is = null;
            // Only display the first 500 characters of the retrieved
            // web page content.
            int len = 500;

            try {
                URL url = new URL(myurl);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(10000 /* milliseconds */);
                conn.setConnectTimeout(15000 /* milliseconds */);
                conn.setRequestMethod("GET");
                conn.setDoInput(true);
                // Starts the query
                conn.connect();
                int response = conn.getResponseCode();
                is = conn.getInputStream();

                // Convert the InputStream into a string
                String contentAsString = readIt(is, len);
                return contentAsString;

                // Makes sure that the InputStream is closed after the app is
                // finished using it.
            } finally {
                if (is != null) {
                    is.close();
                }
            }
        }

        public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
            Reader reader = null;
            reader = new InputStreamReader(stream, "UTF-8");
            char[] buffer = new char[len];
            reader.read(buffer);
            return new String(buffer);
        }
    }
}

这是MPOSDashStruct类:

package io.kd.figgycity50.mpos.mposchecker;

import com.google.gson.annotations.SerializedName;

/**
 * Created by George on 25/05/2014.
 */
public class MPOSDashStruct {
    public static class getdashboarddata {
        public static class data {
            public static class personal {
                public static int hashrate;
            }
            public static class pool {
                public static int hashrate;
                public static int difficulty;
                public static class info {
                    @SerializedName("name")
                    public static String poolName;
                    public static String currency;
                }
            }
            public static class network {
                public static int hashrate;
                public static int difficulty;
            }
        }
    }
    public String getName() {
        return getdashboarddata.data.pool.info.poolName;
    }

    public String getCurrency() {
        return getdashboarddata.data.pool.info.currency;
    }

    public int getPoolHash() {
        return getdashboarddata.data.pool.hashrate;
    }

    public int getPoolDiff() {
        return getdashboarddata.data.pool.difficulty;
    }

    public int getMyHash() {
        return getdashboarddata.data.personal.hashrate;
    }

    public int getNetHash() {
        return getdashboarddata.data.network.hashrate;
    }
}

该代码看起来不错,并且Android Studio没有错误。

编辑2:contentAsString输出

05-25 17:30:12.976  29974-29988/io.kd.figgycity50.mpos.mposchecker D/INFO﹕ {"getdashboarddata":{"version":"1.0.0","runtime":632.7919960022,"data":{"raw":{"personal":{"hashrate":0},"pool":{"hashrate":1675289},"network":{"hashrate":38541151.201,"esttimeperblock":61.161346587453,"nextdifficulty":538.41366248,"blocksuntildiffchange":1}},"personal":{"hashrate":0,"sharerate":"0.0000","sharedifficulty":0,"shares":{"valid":0,"invalid":0,"invalid_percent":0,"unpaid":0},"estimates":{"block":0,"fee":0,"donation":0,"payout":0}},"pool":{"info":{"name":"RAPIDHASH","currency":"DOGE"}

使用Log.d(“ INFO”,contentAsString)

编辑:使用getContentLength之后,新的logcat是这样的:

05-25 17:50:19.203    5143-5157/io.kd.figgycity50.mpos.mposchecker W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x41bd4ba8)
05-25 17:50:19.203    5143-5157/io.kd.figgycity50.mpos.mposchecker E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: io.kd.figgycity50.mpos.mposchecker, PID: 5143
    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.NegativeArraySizeException: -1
            at io.kd.figgycity50.mpos.mposchecker.MainActivity$DownloadWebpageTask.readIt(MainActivity.java:120)
            at io.kd.figgycity50.mpos.mposchecker.MainActivity$DownloadWebpageTask.downloadUrl(MainActivity.java:104)
            at io.kd.figgycity50.mpos.mposchecker.MainActivity$DownloadWebpageTask.doInBackground(MainActivity.java:71)
            at io.kd.figgycity50.mpos.mposchecker.MainActivity$DownloadWebpageTask.doInBackground(MainActivity.java:64)
            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)

指向我的代码的这一行:

public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
            Reader reader = null;
            reader = new InputStreamReader(stream, "UTF-8");
            char[] buffer = new char[len]; //this line, others added so you can understand
            reader.read(buffer);
            return new String(buffer);
        }

编辑3:指导Gson处理读取器工作正常,但再次出现新的错误。Logcat:

05-26 09:17:52.459  11810-11810/io.kd.figgycity50.mpos.mposchecker E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: io.kd.figgycity50.mpos.mposchecker, PID: 11810
    java.lang.RuntimeException: Unable to start activity ComponentInfo{io.kd.figgycity50.mpos.mposchecker/io.kd.figgycity50.mpos.mposchecker.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at io.kd.figgycity50.mpos.mposchecker.MainActivity.onCreate(MainActivity.java:49)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

指向:

protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
        String prefPool = sharedPref.getString("pref_pool", "https://doge.rapidhash.net/");
        String prefKey = sharedPref.getString("pref_key", "XXXX");
        new DownloadWebpageTask().execute(prefPool + "index.php?page=api&action=getdashboarddata&api_key=" + prefKey);
        TextView t = (TextView)findViewById(R.id.poolName); // this line
        TextView t2 = (TextView)findViewById(R.id.khashMe);
        TextView t3 = (TextView)findViewById(R.id.khashPool);
        TextView t4 = (TextView)findViewById(R.id.khashNet);
        t.setText(dashStruct.getName());
        t2.setText(dashStruct.getMyHash());
        t3.setText(dashStruct.getPoolHash());
        t4.setText(dashStruct.getNetHash());
    }
维克拉姆

Edit 3上面看,以下行似乎抛出了NullPointerException

t.setText(dashStruct.getName());

我可以说您声明dashStruct为在AsyncTask中初始化的类级别变量DownloadWebpageTask

通过设计,AsyncTask将在主线程上执行(确切地说,是AsyncTask#doInBackground(T)方法)。如果主线程执行时DownloadWebpageTask尚未完成初始化-将抛出NPE-为null。dashStructt.setText(dashStruct.getName());dashStruct

为了突破这个例外,覆盖onPostExecute()DownloadWebpageTask以下代码移动到它(从删除onCreate(Bundle)):

@Override
protected void onPostExecute(String result) {

    if (dashStruct != null) {
        t.setText(dashStruct.getName());
        t2.setText(dashStruct.getMyHash());
        t3.setText(dashStruct.getPoolHash());
        t4.setText(dashStruct.getNetHash());
    } else {
        // Deal with dashStruct being null
    }
}

我注意到在您的原始帖子中,您正在从中更新UI(设置textview文本)DownloadWebpageTask#doInBackground(String...)这将在主线程上抛出“ IllegalStateExceptionas”,这doInBackground()是唯一允许触摸您的UI的线程。onPostExecute()在主线程上处理。这就是您的UI逻辑应该去的地方。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

造成原因:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期第':'行

来自分类Dev

造成原因:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期第':'行

来自分类Dev

引起原因:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但位于第1行第2列

来自分类Dev

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为 BEGIN_ARRAY,但在第 1 行第 101 列路径为 BEGIN_OBJECT

来自分类Dev

kotlin com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期为 BEGIN_OBJECT 但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

来自分类Dev

获取异常:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期在第1行第24列为“:”

来自分类Dev

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但位于第2行第5列

来自分类Dev

Retrofit2错误java.io.EOFException:第1行第1列的输入结束

来自分类Dev

Google Gson-com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为字符串,但为BEGIN_OBJECT

来自分类Dev

com.google.gson.JsonSyntaxException:android中的java.lang.IllegalStateException

来自分类Dev

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但为STRING

来自分类Dev

硒网络驱动程序java.lang.NoClassDefFoundError:com / google / gson / JsonSyntaxException

来自分类Dev

使用GSON进行Json解析:JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但在第1行第2列路径处为BEGIN_ARRAY

来自分类Dev

com.google.gson.JsonSyntaxException 解析简单的 JSON Inputstream 时

来自分类Dev

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为字符串,但为BEGIN_OBJECT

来自分类Dev

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为字符串,但为BEGIN_OBJECT

来自分类Dev

java.lang.NoClassDefFoundError:com.google.gson.Gson

来自分类Dev

GSON-JsonSyntaxException-第7行第4列的预期名称

来自分类Dev

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在Android中为BEGIN_OBJECT

来自分类Dev

com.google.gson.JsonObject不能转换为com.google.gson.JsonArray在Java中

来自分类Dev

Gson .JsonSyntaxException-java.lang.NumberFormatException:无效的double:“”

来自分类Dev

从.net DateTime将gson JsonSyntaxException转换为Java Date

来自分类Dev

java.lang.NoSuchMethodError: com.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder;

来自分类Dev

获取java.lang.ClassNotFoundException:com.google.gson.Gson用于Maven项目

来自分类Dev

Java - Google GSON 语法错误

来自分类Dev

带有 Gson 和改造的 Java 的 Json 错误 [预期为 BEGIN_ARRAY,但在第 1 行第 70 列路径 $.Data 处为 BEGIN_OBJECT]

来自分类Dev

使用com.google.gson解析JSON

来自分类Dev

Gson:legalStateExcetpion:应为int,但第1行第3列的名称为NAME

来自分类Dev

com.google.gson.JsonPrimitive无法转换为com.google.gson.JsonObject错误

Related 相关文章

  1. 1

    造成原因:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期第':'行

  2. 2

    造成原因:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期第':'行

  3. 3

    引起原因:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但位于第1行第2列

  4. 4

    com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为 BEGIN_ARRAY,但在第 1 行第 101 列路径为 BEGIN_OBJECT

  5. 5

    kotlin com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期为 BEGIN_OBJECT 但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

  6. 6

    获取异常:com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期在第1行第24列为“:”

  7. 7

    com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但位于第2行第5列

  8. 8

    Retrofit2错误java.io.EOFException:第1行第1列的输入结束

  9. 9

    Google Gson-com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为字符串,但为BEGIN_OBJECT

  10. 10

    com.google.gson.JsonSyntaxException:android中的java.lang.IllegalStateException

  11. 11

    com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但为STRING

  12. 12

    硒网络驱动程序java.lang.NoClassDefFoundError:com / google / gson / JsonSyntaxException

  13. 13

    使用GSON进行Json解析:JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但在第1行第2列路径处为BEGIN_ARRAY

  14. 14

    com.google.gson.JsonSyntaxException 解析简单的 JSON Inputstream 时

  15. 15

    com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为字符串,但为BEGIN_OBJECT

  16. 16

    com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为字符串,但为BEGIN_OBJECT

  17. 17

    java.lang.NoClassDefFoundError:com.google.gson.Gson

  18. 18

    GSON-JsonSyntaxException-第7行第4列的预期名称

  19. 19

    com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在Android中为BEGIN_OBJECT

  20. 20

    com.google.gson.JsonObject不能转换为com.google.gson.JsonArray在Java中

  21. 21

    Gson .JsonSyntaxException-java.lang.NumberFormatException:无效的double:“”

  22. 22

    从.net DateTime将gson JsonSyntaxException转换为Java Date

  23. 23

    java.lang.NoSuchMethodError: com.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder;

  24. 24

    获取java.lang.ClassNotFoundException:com.google.gson.Gson用于Maven项目

  25. 25

    Java - Google GSON 语法错误

  26. 26

    带有 Gson 和改造的 Java 的 Json 错误 [预期为 BEGIN_ARRAY,但在第 1 行第 70 列路径 $.Data 处为 BEGIN_OBJECT]

  27. 27

    使用com.google.gson解析JSON

  28. 28

    Gson:legalStateExcetpion:应为int,但第1行第3列的名称为NAME

  29. 29

    com.google.gson.JsonPrimitive无法转换为com.google.gson.JsonObject错误

热门标签

归档