Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AsyncTask无法从php mysql检索JSON字符串_Php_Android_Mysql_Json_Android Asynctask - Fatal编程技术网

Android AsyncTask无法从php mysql检索JSON字符串

Android AsyncTask无法从php mysql检索JSON字符串,php,android,mysql,json,android-asynctask,Php,Android,Mysql,Json,Android Asynctask,我可以显示存储在“值”中的数组中的数据,但当我试图从数据库中获取数据时,我得到的是 “E/Surface:getSlotFromBufferLocked:未知缓冲区” 错误。我有php脚本和mysql数据库,其中有一个“问题”列。我不确定我是否在连接建立、json解析或其他方面有问题 我的版本片段.java public class VersionsFragment extends ListFragment { public VersionsFragment() { } @Override

我可以显示存储在“值”中的数组中的数据,但当我试图从数据库中获取数据时,我得到的是

“E/Surface:getSlotFromBufferLocked:未知缓冲区”

错误。我有php脚本和mysql数据库,其中有一个“问题”列。我不确定我是否在连接建立、json解析或其他方面有问题

我的版本片段.java

public class VersionsFragment extends ListFragment {
public VersionsFragment() {
}


@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    //String[] versionName = getResources().getStringArray(R.array.version_names); //this works fine
    new MyTask().execute();
}

class MyTask extends AsyncTask<String, Integer, String[]> {

    @Override
    protected String[] doInBackground(String... params) {
        String[] versionName = new String[0];
        ArrayList<String> scripts = new ArrayList<String>();
        try {
            URL url = new URL("http://192.168.1.105/android/phpcall.php");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            String strJson = "";
            String line;
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            while ((line = br.readLine()) != null) {
                strJson += line;
            }
            //Log.d(VersionsFragment.class.getSimpleName(), line);
            JSONArray jArray = new JSONArray(strJson);

            for (int i = 0; i < jArray.length(); i++) {

                JSONObject jObject = jArray.getJSONObject(i);

                String name = jObject.getString("question");

                scripts.add(name);
            }
            versionName = scripts.toArray(new String[scripts.size()]);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return versionName;
    }

    protected void onPostExecute(String[] result){
        //for(int i=0;i<result.length;i++)
            //Log.d(VersionsFragment.class.getSimpleName(), result[i]);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, result);
        setListAdapter(adapter);
    }
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    OnVersionNameSelectionChangeListener listener = (OnVersionNameSelectionChangeListener) getActivity();
     listener.OnSelectionChanged(position);
   }
}
public类VersionsFragment扩展了ListFragment{
公共版本片段(){
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
//String[]versionName=getResources().getStringArray(R.array.version_names);//这很好用
新建MyTask().execute();
}
类MyTask扩展了AsyncTask{
@凌驾
受保护字符串[]doInBackground(字符串…参数){
String[]versionName=新字符串[0];
ArrayList脚本=新建ArrayList();
试一试{
URL=新URL(“http://192.168.1.105/android/phpcall.php");
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
字符串strJson=“”;
弦线;
BufferedReader br=新的BufferedReader(新的InputStreamReader(conn.getInputStream());
而((line=br.readLine())!=null){
strJson+=线路;
}
//Log.d(VersionsFragment.class.getSimpleName(),第行);
JSONArray jArray=新JSONArray(strJson);
for(int i=0;i//对于(int i=0;i编辑上述代码,如下所示:

JSONObject jsonObj = new JSONObject(strJson);

// Getting JSON Array node
JSONArray jArray = jsonObj.getJSONArray(YOUR_JSON_ARRAY_NAME);

按如下方式编辑上述代码:

JSONObject jsonObj = new JSONObject(strJson);

// Getting JSON Array node
JSONArray jArray = jsonObj.getJSONArray(YOUR_JSON_ARRAY_NAME);

在doinbackground中,用上面的行替换JSONArray jArray=new JSONArray(strJson);我是否应该用strJson回复您的_JSON_ARRAY_名称?您能打印JSON响应吗?是的,编写Log.d(VersionsFragment.class.getSimpleName(),“JSON字符串”+strJson);在JSONObject上面JSONObject=new JSONObject(strJson)给出以下行:JSON字符串[{“id”:“1”,“name”:“what is java”,“address”:“programming language”},{“id”:“2”,“name”:“what is oop”,“address”:“object oriented programming”},{“id”:“3”,“name”:“why java used?”,“address”:“May for android”}]我已经更改了php脚本,现在它检索到这个字符串。JSON字符串[{“id”:“1”,“question”:“what is java”,“答案”:“编程语言”},{“id”:“2”,“问题”:“oop是什么”,“答案”:“面向对象编程”},{“id”:“3”,“问题”:“为什么使用java?”,“答案”:“主要用于android”}]在doinbackground中替换JSONArray jArray=new JSONArray(strJson);上面几行。我应该用strJson来回复你的_JSON_ARRAY_NAME吗?你能打印JSON响应吗?是的,写Log.d(VersionsFragment.class.getSimpleName(),“JSON字符串”+strJson);上面JSONObject jsonObj=new JSONObject(strJson);给出以下几行:JSON字符串[{“id”:“1”,“NAME”:“什么是java”,“地址”:“编程语言”},{“id”:“2”,”名称“:”什么是oop“,”地址“:”面向对象编程“},{”id“:”3“,”名称“:”为什么使用java?”,“地址“:”主要用于android“}]我已经更改了php脚本,现在它检索这个字符串。JSON字符串[{”id“:”1“,”问题“:”什么是java“,”答案“:”编程语言“},{”id“:”2“,”问题“:”什么是oop“,”答案“:”面向对象编程“},{”id“:”3“,”问题“:“为什么使用java?”,“答案“:“主要用于android”}]