java.lang.String 无法从 Okhttp 转换为 JSONArray
Posted
技术标签:
【中文标题】java.lang.String 无法从 Okhttp 转换为 JSONArray【英文标题】:java.lang.String cannot be converted to JSONArray from Okhttp 【发布时间】:2017-06-19 03:24:06 【问题描述】:我正在尝试从服务器获取 json 并将其放入我的 RecyclerView,但它显示“java.lang.String 无法转换为 JSONArray”。我试图跟踪我的 json,但它什么也没显示。怎么了,怎么解决?
private void Prosesdataserver(int id)
AsyncTask<Integer, Void, Void> task = new AsyncTask<Integer, Void, Void>()
@Override
protected Void doInBackground(Integer... integers)
OkHttpClient client = new OkHttpClient();
try
RequestBody formBody = new FormBody.Builder().add("username_krm", username).add("password_krm", password).build();
Request request = new Request.Builder().url("http://" + urlpakai + "/utrapos/index.php/getpenawaran?id="+integers[0]).post(formBody).build();
response = client.newCall(request).execute();
ini = response.body().toString();
JSONArray array = new JSONArray(ini);
System.out.println("Saya Berkata: " + ini);
for(int i=0; i<array.length();i++)
JSONObject object = array.getJSONObject(i);
DataJson hasil = new DataJson(object.getInt("id"), object.getString("kode"), object.getString("tglpenawaran"), object.getString("nama"), object.getString("supplier"), object.getString("nopenawaran"));
data.add(hasil);
catch (IOException e)
e.printStackTrace();
catch (JSONException e)
e.printStackTrace();
return null;
【问题讨论】:
上传您尝试转换为 JSON 的字符串 在此处发布您的json
@AxelH,我正在为我的网址使用 codeigniter。
@DennyKurniawan 你检查过请求了吗?你得到一个 JSON(检查一个 REST 客户端)吗?如果是这样,它的格式不像 JSON(如错误所说)
尝试使用邮递员检查您的回复
【参考方案1】:
根据您分享的最少信息,我假设错误出现在这一行
JSONArray array = new JSONArray(ini);
背后的原因是你的ini
。应该是
ini = response.body().string();
而不是.toString()
这是一个示例代码:
try
String responseData = response.body().string();
JSONArray json = new JSONArray(responseData);
catch (JSONException e)
如需更多了解如何使用 OkHttp 进行网络调用,请查看documentation。
【讨论】:
感谢您指向 .string() 部分。我还用 toString() 打错了,出现错误。【参考方案2】:改变这一行ini = response.body().toString();
到
ini = response.body().string();
【讨论】:
【参考方案3】:在您的数据库中添加全文:
ALTER TABLE yourtable ADD FULLTEXT(kode,tglpenawaran,nama,supplier,nopenawaran);
然后做一个测试:
SELECT * FROM yourtable WHERE MATCH (kode,tglpenawaran,nama,supplier,nopenawaran) AGAINST ('text')
【讨论】:
以上是关于java.lang.String 无法从 Okhttp 转换为 JSONArray的主要内容,如果未能解决你的问题,请参考以下文章
Spring @PreAuthorize hasAuthority 异常无法从类型 [java.lang.String] 转换为类型 [java.lang.Boolean] 的值'hasAuthori
无法从 VALUE_STRING 令牌中反序列化 java.lang.String[] 的实例
java.lang.String 无法从 Android 转换为 JSONObject
Spring Cloud @SqsListener MessageConversionException:无法从 [java.lang.String] 转换为 GenericMessage