Java 无法分析json-无法将字符串转换为JSONArray

Java 无法分析json-无法将字符串转换为JSONArray,java,android,json,parsing,Java,Android,Json,Parsing,我在尝试从解析json时遇到了一个问题,获取字符串形式的json响应,然后移动到JSONArray中,然后解析它。但是,它说java.lang.String不能转换为JSONArray 我获取json响应的代码在doInBackground()中,在onPostExecute()中解析json 以下是我的解析代码: public class HomeActivity extends AppCompatActivity { public static final int CONNECTIO

我在尝试从解析json时遇到了一个问题,获取字符串形式的json响应,然后移动到JSONArray中,然后解析它。但是,它说java.lang.String不能转换为JSONArray

我获取json响应的代码在doInBackground()中,在onPostExecute()中解析json

以下是我的解析代码:

public class HomeActivity extends AppCompatActivity {
    public static final int CONNECTION_TIMEOUT = 10000;
    public static final int READ_TIMEOUT = 15000;
    private RecyclerView rv_user;
    private AdapterUser mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        new AsyncFetch().execute();
    }

    private class AsyncFetch extends AsyncTask<String, String, String> {
        String response = "";
        ProgressDialog pdLoading = new ProgressDialog(HomeActivity.this);
        HttpURLConnection conn;
        URL url = null;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            pdLoading.setMessage("\tLoading...");
            pdLoading.setCancelable(false);
            pdLoading.show();

         }

         @Override
         protected String doInBackground(String... params) {
            try {
                url = new URL("https://jsonplaceholder.typicode.com/users");
            } catch (MalformedURLException e) {
                e.printStackTrace();
                return e.toString();
            }

            try {
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(READ_TIMEOUT);
                conn.setConnectTimeout(CONNECTION_TIMEOUT);
                conn.setRequestMethod("GET");

                conn.setDoOutput(true);

            } catch (IOException e1) {
                e1.printStackTrace();
                return e1.toString();
            }

            try {
                int response_code = conn.getResponseCode();
                if (response_code == HttpURLConnection.HTTP_OK) {
                    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                    StringBuilder sb = new StringBuilder();
                    String line;

                    while ((line = reader.readLine()) != null) {
                        sb.append(line);
                    }
                    response = sb.toString();

                    // Pass data to onPostExecute method
                    System.out.println(response);

                    return (response);
                } else {
                    return ("unsuccessful");
                }

            } catch (IOException e) {
                e.printStackTrace();
                return e.toString();
            } finally {
                conn.disconnect();
            }
         }

        @Override
        protected void onPostExecute(String result) {
            pdLoading.dismiss();
            List<DataUser> 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_user_data = jArray.getJSONObject(i);

                   DataUser userData = new DataUser();
                   userData.id = json_user_data.getString("id");
                   userData.fullName = json_user_data.getString("name");
                   userData.uName = json_user_data.getString("username");
                   userData.email = json_user_data.getString("email");

                   JSONObject addr = json_user_data.getJSONObject("address");
                   String street = addr.getString("street");
                   String city = addr.getString("city");
                   int zip = addr.getInt("zipcode");

                   userData.address = street+", "+ city + " " + zip;
                   userData.phone = json_user_data.getString("phone");
                   userData.web = json_user_data.getString("website");
                   data.add(userData);
                }

                // Setup and Handover data to recyclerview
                rv_user = (RecyclerView)findViewById(R.id.userList);
                mAdapter = new AdapterUser(HomeActivity.this, data);
                rv_user.setAdapter(mAdapter);
                rv_user.setLayoutManager(new LinearLayoutManager(HomeActivity.this));

            } catch (JSONException e) {
                Toast.makeText(HomeActivity.this, e.toString(), Toast.LENGTH_LONG).show();
            }

        }

    }
}
公共类HomeActivity扩展了AppCompatActivity{
公共静态最终int连接\u超时=10000;
公共静态最终整型读取超时=15000;
私人RecyclerView rv_用户;
私人AdapterUser mAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
新建AsyncFetch().execute();
}
私有类AsyncFetch扩展了AsyncTask{
字符串响应=”;
ProgressDialog pdLoading=新建ProgressDialog(HomeActivity.this);
httpurl连接连接;
URL=null;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pdLoading.setMessage(“\t加载…”);
pdLoading.setCancelable(假);
pdLoading.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
url=新url(“https://jsonplaceholder.typicode.com/users");
}捕获(格式错误){
e、 printStackTrace();
返回e.toString();
}
试一试{
conn=(HttpURLConnection)url.openConnection();
conn.setReadTimeout(读取超时);
连接设置连接超时(连接超时);
conn.setRequestMethod(“GET”);
连接设置输出(真);
}捕获(IOE1异常){
e1.printStackTrace();
返回e1.toString();
}
试一试{
int response_code=conn.getResponseCode();
if(response\u code==HttpURLConnection.HTTP\u OK){
BufferedReader=新的BufferedReader(新的InputStreamReader(conn.getInputStream());
StringBuilder sb=新的StringBuilder();
弦线;
而((line=reader.readLine())!=null){
某人附加(行);
}
response=sb.toString();
//将数据传递给onPostExecute方法
System.out.println(响应);
返回(响应);
}否则{
返回(“未成功”);
}
}捕获(IOE异常){
e、 printStackTrace();
返回e.toString();
}最后{
连接断开();
}
}
@凌驾
受保护的void onPostExecute(字符串结果){
pdLoading.disclose();
列表数据=新的ArrayList();
pdLoading.disclose();
试一试{
JSONArray jArray=新JSONArray(结果);
//从json中提取数据并作为类对象存储到ArrayList中

对于(int i=0;i您看到url中“result”的内容了吗?我想这不是您想要的内容。

将代码中的两个字符串更改为:

conn.setDoOutput(false);

您将从服务器读取,而不是写入

String zip=addr.getString(“zipcode”);


您的json中的邮政编码格式为5959590-4157,因此不能理解为int。

请显示失败的地方,并删除不必要的代码。对此,我很抱歉。编辑了我的问题。