我正在尝试将 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 的内容和方式将有所帮助。
更新
你有两个错误 -
缓冲区错误 - lock == null
。原因 - 您将null
值传递给InputStreamReader
,即httpEntity.getContent();
为 null。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/