gpt4 book ai didi

android - 无法在android中获取json数组

转载 作者:行者123 更新时间:2023-11-30 03:00:42 24 4
gpt4 key购买 nike

我正在尝试将 json 数据从 php 脚本获取到我的 android 应用程序中,但是 getJSONFromUrl(URL); 不起作用。下面是我的代码..

主要 Activity 类

public class MainActivity extends Activity {
private static final String URL = "http://10.0.2.2:1234/main.php/";
private JSONArray words = null;
private ArrayList<String> wordsList;
private static final String TAG_WORDS = "words";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
wordsList = new ArrayList<String>();
updateJSONdata();
Toast.makeText(getApplicationContext(), wordsList.toString(),
Toast.LENGTH_LONG).show();
}

public void updateJSONdata() {
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(URL);// this is where the error is
try {
words = json.getJSONArray(TAG_WORDS);
for (int i = 0; i < words.length(); i++) {
JSONObject c = words.getJSONObject(i);
String title = c.toString();
wordsList.add(title);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}

JSONParser 类

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
public JSONParser() {
}

public JSONObject getJSONFromUrl(final String url) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return jObj;
}
}

来自 main.php 的 JSON 数据

{"words":[["bra"],["fie"]],"success":1}  

PHP代码:

<?php
$username = "root";
$password = "";
$host = "localhost";
$dbname = "dictionary_db";
$con=mysql_connect($host, $username, $password);
if(!$con) die('could not connect'. mysql_error());
mysql_select_db($dbname,$con);
$query = "SELECT word from local_words" ;
$result=mysql_query($query) or die(mysql_error());
$count = 0;
$wordsArr = array();
$response["words"] = array();
while ($row = mysql_fetch_row($result)){
array_push($wordsArr,$row);
$count++;
}
$response["success"] = 1;
$response["words"] = $wordsArr;
echo json_encode($response);
?>

LogCat 中的错误信息:

Buffer Error : Error converting result.lang.NullPointerException: lock == null
JSON Parser : Error parsing data org.json.JSONException: End of input at character 0 of

最佳答案

{"success":1,"words":[word1,word2]} 不是有效的 JSON。一个有效的 JSON 应该是这样的

{"success":1,"words":["word1","word2"]}

如果 JSON 发送正确,请检查您的服务器响应。如果您添加更多信息,您的服务器返回 JSON 的内容和方式将有所帮助。

更新

你有两个错误 -

  1. 缓冲区错误 - lock == null。原因 - 您将 null 值传递给 InputStreamReader,即 httpEntity.getContent(); 为 null。

  2. JSON 错误 - 解析器正在尝试解析空字符串,即在字符 0 处

HTTP POST 方法不受支持,或者服务器出现其他错误。您需要检查 httpResponse 的状态并将其记录下来。这将确定问题

另一个更新

您收到 Socket Exception - Permission Denied,这里的问题是您尚未向应用程序添加 Internet 权限。转到您的 list ,并添加以下权限

<uses-permission android:name="android.permission.INTERNET"/>

尝试一下,如果有帮助请告诉我。

关于android - 无法在android中获取json数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com