【问题标题】:error when try to parse JSON with GSON to spinner android尝试使用 GSON 将 JSON 解析为微调器 android 时出错
【发布时间】:2017-09-20 11:40:56
【问题描述】:

当我将带有库 GSON 的 JSON 解析到我的微调器 android 时,我遇到了一些错误。错误是:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 应为 BEGIN_OBJECT 但在第 1 行第 1 列路径 $

当我点击 log cat android studio 时:

代码行错误spinnerData = Arrays.asList(mGson.fromJson(response, Set_jadwal[].class));

这是完整的我的源代码:

public class jadwal_Activity extends AppCompatActivity {

private String DATA_URL_KELAS = "http://smpn8pky.rf.gd/Json_kelas.php";
public static final String DATA_URL_JADWAL = "http://smpn8pky.rf.gd/Json_jadwal.php";
public List<Set_jadwal> spinnerData;
private RequestQueue queue;
Spinner spinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_jadwal);

    queue = Volley.newRequestQueue(this);
    requestJsonObject();
}

private void requestJsonObject() {
    RequestQueue queue = Volley.newRequestQueue(this);
    StringRequest stringRequest = new StringRequest(Request.Method.GET, DATA_URL_KELAS, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            GsonBuilder builder = new GsonBuilder();
            Gson mGson = builder.create();
            spinnerData = Arrays.asList(mGson.fromJson(response, Set_jadwal[].class));
            //display first question to the user
            if(null != spinnerData){
                spinner = (Spinner) findViewById(R.id.spiner_kelas);
                assert spinner != null;
                spinner.setVisibility(View.VISIBLE);
                SpinnerAdapter spinnerAdapter = new SpinnerAdapter(jadwal_Activity.this, spinnerData);
                spinner.setAdapter(spinnerAdapter);
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    });
    queue.add(stringRequest);
}

这是我的json回复JSON RESPON的链接

【问题讨论】:

  • response 包含什么?我怀疑你得到了一些不是 json 的文本。
  • 你是什么意思,我有点不太懂。我想将该 json 解析为我的微调器。我必须做什么我的代码???
  • 阅读我的回答。这不是您的代码的问题,而是您的虚拟主机的问题。
  • 哦,对不起,我现在明白了。谢谢你的回答。

标签: java android json gson


【解决方案1】:

当我尝试使用 Postman(Google Chrome 插件)从您的 URL 中 GET JSON 时,响应告诉我:

这意味着除非站点禁用它的要求,否则不允许任何没有 javascript 的传入请求,您将无法获取 json 数据。网站通常这样做的原因是为了防止被机器人发送垃圾邮件。

所以澄清一下:这不是您的代码的问题,而是(您/该)网络主机的问题。

【讨论】:

  • 嗯..我认为你是对的。那我该怎么办?是否有任何设置可以在主机上解决这个问题??我使用来自infinityfree.net的免费托管
  • 很可能没有设置可以让您更改此设置。这是免费托管公司的管理员已采取的一项预防措施。我建议找到自己的(最好是付费的,但可能很便宜)托管。
【解决方案2】:

在您的示例中,您尝试将 JSON 数组转换为 Set_jadwal 数组,然后使用 Arrays.asList 进行列表。我认为它是多余的。

使用GsonTypeToken直接转换为List

String response = "[{\"kd_kelas\":\"KLS-1\",\"kelas\":\"VII-1\"},{\"kd_kelas\":\"KLS-2\",\"kelas\":\"VII-2\"},{\"kd_kelas\":\"KLS-3\",\"kelas\":\"VII-3\"},{\"kd_kelas\":\"KLS-4\",\"kelas\":\"VII-4\"},{\"kd_kelas\":\"KLS-5\",\"kelas\":\"VII-5\"},{\"kd_kelas\":\"KLS-6\",\"kelas\":\"VII-6\"},{\"kd_kelas\":\"KLS-7\",\"kelas\":\"VII-7\"},{\"kd_kelas\":\"KLS-8\",\"kelas\":\"VII-8\"},{\"kd_kelas\":\"KLS-9\",\"kelas\":\"VII-9\"},{\"kd_kelas\":\"KLS-10\",\"kelas\":\"VII-10\"},{\"kd_kelas\":\"KLS-11\",\"kelas\":\"VII-11\"},{\"kd_kelas\":\"KLS-12\",\"kelas\":\"VIII-1\"},{\"kd_kelas\":\"KLS-13\",\"kelas\":\"VIII-2\"},{\"kd_kelas\":\"KLS-14\",\"kelas\":\"VIII-3\"},{\"kd_kelas\":\"KLS-15\",\"kelas\":\"VIII-4\"},{\"kd_kelas\":\"KLS-16\",\"kelas\":\"VIII-5\"},{\"kd_kelas\":\"KLS-17\",\"kelas\":\"VIII-6\"},{\"kd_kelas\":\"KLS-18\",\"kelas\":\"VIII-7\"},{\"kd_kelas\":\"KLS-19\",\"kelas\":\"VIII-8\"},{\"kd_kelas\":\"KLS-20\",\"kelas\":\"VIII-9\"},{\"kd_kelas\":\"KLS-21\",\"kelas\":\"VIII-10\"},{\"kd_kelas\":\"KLS-22\",\"kelas\":\"VIII-11\"},{\"kd_kelas\":\"KLS-23\",\"kelas\":\"IX-1\"},{\"kd_kelas\":\"KLS-24\",\"kelas\":\"IX-2\"},{\"kd_kelas\":\"KLS-25\",\"kelas\":\"IX-3\"},{\"kd_kelas\":\"KLS-26\",\"kelas\":\"IX-4\"},{\"kd_kelas\":\"KLS-27\",\"kelas\":\"IX-5\"},{\"kd_kelas\":\"KLS-28\",\"kelas\":\"IX-6\"},{\"kd_kelas\":\"KLS-29\",\"kelas\":\"IX-7\"},{\"kd_kelas\":\"KLS-30\",\"kelas\":\"IX-8\"},{\"kd_kelas\":\"KLS-31\",\"kelas\":\"IX-9\"},{\"kd_kelas\":\"KLS-32\",\"kelas\":\"IX-10\"},{\"kd_kelas\":\"KLS-33\",\"kelas\":\"IX-11\"}]";

List<Set_jadwal> result = new Gson().fromJson(response, 
                new TypeToken<List<Set_jadwal>>() {}.getType());

Set_jadwal 在哪里:

public class Set_jadwal {
    private String kd_kelas;
    private String kelas;
}

附带说明一下,使用Set_jadwal 作为类名不是一个好习惯;)

【讨论】:

    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多