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

标签 android json arrays

我正在尝试将 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/

相关文章:

javascript - 插入一个 div 以使用 JavaScript 生成的 HTML 包裹其他 div

ios - 修改行数组时,Swift 2 数据不会重新加载数据

arrays - 使用 Ruby 读取 YAML,意外的返回类型

php - 使用数组通过 SELECT 和 PHP 进行查询

当方向改变时,Android 横向到纵向不加载屏幕

android - Android 中的 SwiperefreshLayout

android - 实时模式下的 Google Play 未知错误

android - 视频解码期间采样时间/呈现时间不一致

python - JSON Python 读取/写入 json 文件问题

c++ - 将值读入数组结构