我不知道为什么,但是当我试图从JSON获取数据时,我得到了这个错误:
JAVA无法在Jsonarray中转换lang.String
这是我的代码,
主要活动:
public class MainActivity extends AppCompatActivity {
// CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds
public static final int CONNECTION_TIMEOUT = 10000;
public static final int READ_TIMEOUT = 15000;
private RecyclerView mRVFishPrice;
private AdapterProgram mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Make call to AsyncTask
new AsyncFetch().execute();
}
private class AsyncFetch extends AsyncTask<String, String, String> {
ProgressDialog pdLoading = new ProgressDialog(MainActivity.this);
HttpURLConnection conn;
URL url = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected String doInBackground(String... params) {
try {
// Enter URL address where your json file resides
// Even you can make call to php file which returns json data
url = new URL("http://v1.tvguideapi.com/programs?channels[]=2161&channels[]=2162&channels[]=2163&start=1484685000&stop=1484690400");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return e.toString();
}
try {
// Setup HttpURLConnection class to send and receive data from php and mysql
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(READ_TIMEOUT);
conn.setConnectTimeout(CONNECTION_TIMEOUT);
conn.addRequestProperty("Authorization", "nSLkk3o6xowTgXryFVxWaVSRW3zxNwlzmYIcgCkE");
conn.setRequestMethod("GET");
// setDoOutput to true as we recieve data from json file
conn.setDoOutput(true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return e1.toString();
}
try {
int response_code = conn.getResponseCode();
// Check if successful connection made
if (response_code == HttpURLConnection.HTTP_OK) {
// Read data sent from server
InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
// Pass data to onPostExecute method
return (result.toString());
} else {
return ("unsuccessful");
}
} catch (IOException e) {
e.printStackTrace();
return e.toString();
} finally {
conn.disconnect();
}
}
@Override
protected void onPostExecute(String result) {
//this method will be running on UI thread
pdLoading.dismiss();
List<Programs> data=new ArrayList<>();
pdLoading.dismiss();
try {
JSONArray jArray = new JSONArray(result);
// Extract data from json and store into ArrayList as class objects
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Programs fishData = new Programs();
fishData.title= json_data.getString("title");
fishData.description= json_data.getString("description");
// fishData.catName= json_data.getString("cat_name");
// fishData.sizeName= json_data.getString("size_name");
// fishData.price= json_data.getInt("price");
data.add(fishData);
}
// Setup and Handover data to recyclerview
mRVFishPrice = (RecyclerView)findViewById(R.id.fishPriceList);
mAdapter = new AdapterProgram(MainActivity.this, data);
mRVFishPrice.setAdapter(mAdapter);
mRVFishPrice.setLayoutManager(new LinearLayoutManager(MainActivity.this));
} catch (JSONException e) {
Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_LONG).show();
}
}
}
}
JSON:
[
{
"id": "18631557",
"start": "2017-01-17 21:03:00",
"stop": "2017-01-17 22:55:00",
"lang": "",
"title": "The Town",
"subtitle": "",
"description": "Regia: Ben Affleck - Cast: Jeremy Renner, Blake Lively, Ben Affleck, Jon Hamm. POLIZIESCO 120' - Stati Uniti D'America, 2010.",
"category": "",
"channel_id": "2142",
"icon": null,
"ts_start": 1484686980,
"ts_stop": 1484693700
}
]
我相信你的问题与你的查询失败有关(response_code
不是200
),所以doInbackground
返回"不成功"
,这显然不是一个JSON
对象数组,所以你最终会有这个例外。您应该返回一个空数组"[]"
,而不是"不成功"
。
您的请求可能会失败,因为您的头授权
设置不正确,它应该以“Basic
”开头,然后是${username}:${password}
使用Base64
的rfc245-MIME
变体进行编码。有关基本身份验证的更多详细信息,请参见此处。
问题内容: 当我在本地主机中尝试时,它可以工作。这是我的本地主机提供的JSON。 是这个网址http://api.androidhive.info/contacts/中的错误 X 主要活动 错误 问题答案: 您可以尝试以下方法:
问题内容: 在json中工作时出现异常。我的JSONPresr类如下 我正在通过这些代码获取数据 但是我非常惊讶地在这一行中获得异常 我的股权跟踪消息为 我尝试了许多链接,但不幸的是我无法获得结果。请任何人帮助我解决这个问题。在此先感谢所有人 问题答案: 从错误中可以明显看出,您正在尝试将Json Object转换为Json数组。那不应该。 这是读取您的JSON响应的代码。 上面的代码用于JSON
我为一个网站做了一个应用程序。它有一个JSON API。im试图获取结果的URL是:
问题内容: 在获取json数据时出现错误: JSONArray无法转换为JSONObject JSON生成代码: 在阅读上述json时遇到错误代码有什么问题吗? 问题答案: 更改 至 作为数据值的是JsonArray而不是JSONObject。 为了获取单个ID和字段名称,您应该遍历此JSONArray,如下所示:
} 我正在使用以下代码: 我得到了一条错误消息: