简体   繁体   English

Json解析内部类的工作,但不适用于单独的类

[英]Json parse work on inner class but doesn't work on separate class

I want to display JSON data in textView and i do that but the problem is when i create a separate class for lood JSON data and Store into A ArrayList, it doesn"t work. Here is my code please help me what i can do to solve that problem. 我想在textView中显示JSON数据,但是我要这样做,但问题是当我为JSON数据创建单独的类并将其存储到ArrayList中时,它不起作用。这是我的代码,请帮我做什么解决这个问题。

My inner class code 我的内在类代码

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.example.mdashikurrahman.transactions.AppController;
import com.example.mdashikurrahman.transactions.HouseOrPerson;
import com.example.mdashikurrahman.transactions.R;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

public class InsertActivity extends Activity {

    ArrayList<HouseOrPerson> arrayList= new ArrayList<>();

    // json array response url
    private String urlJsonArry = "http://testgarciaplumbing.3eeweb.com/ashik/select.php";
    private Button  btnMakeArrayRequest;
    private TextView txtResponse;
    // temporary string to show the parsed response
    private String jsonResponse="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_insert);

        btnMakeArrayRequest = (Button) findViewById(R.id.btnArrayRequest);
        txtResponse = (TextView) findViewById(R.id.txtResponse);



        btnMakeArrayRequest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                makeJsonArrayRequest();
            }
        });

    }

    /**
     * Method to make json array request where response starts with [
     * */
    private void makeJsonArrayRequest() {


        JsonArrayRequest req = new JsonArrayRequest(Request.Method.POST, urlJsonArry, null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        try {
                            // Parsing json array response
                            // loop through each json object
                            jsonResponse = "";
                            for (int i = 0; i < response.length(); i++) {

                                JSONObject person = (JSONObject) response
                                        .get(i);

                                HouseOrPerson houseOrPerson =new HouseOrPerson(person.getInt("house_id"),
                                        person.getString("house_name"), person.getInt("balance"));

                                arrayList.add(houseOrPerson);

                            }

                            for (int x=0; x<arrayList.size(); x++){
                                jsonResponse +=Integer.toString(arrayList.get(x).getId())
                                        + arrayList.get(x).getName()
                                        + Integer.toString(arrayList.get(x).getBalance())+ "\n\n";

                            }

                            txtResponse.setText(jsonResponse);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }


                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(req);
    }


}

Separate class code 单独的班级代码

BackgroundTask BackgroundTask

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

/**
 * Created by MD ASHIKUR RAHMAN on 9/24/2016.
 */

public class BackgroundTask {
    ArrayList<HouseOrPerson> arrayList= new ArrayList<>();

    // json array response url
    private String urlJsonArry = "http://testgarciaplumbing.3eeweb.com/ashik/select.php";

    /**
     * Method that return a arraylist which made by jsonArray
     * */
    public ArrayList<HouseOrPerson> makeJsonArrayRequest() {


        JsonArrayRequest req = new JsonArrayRequest(Request.Method.POST, urlJsonArry, null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        try {

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

                                JSONObject person = (JSONObject) response
                                        .get(i);

                                HouseOrPerson houseOrPerson =new HouseOrPerson(person.getInt("house_id"),
                                        person.getString("house_name"), person.getInt("balance"));

                                arrayList.add(houseOrPerson);

                            }


                        } catch (JSONException e) {
                            e.printStackTrace();

                        }


                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(req);

        return arrayList;
    }
}

InsertActivity class where i create a object ob BackGround class and call makeJsonArrayRequest method InsertActivity类,在其中创建对象的对象Ob BackGround类并调用makeJsonArrayRequest方法

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.example.mdashikurrahman.transactions.BackgroundTask;
import com.example.mdashikurrahman.transactions.HouseOrPerson;
import com.example.mdashikurrahman.transactions.R;

import java.util.ArrayList;

public class InsertActivity extends Activity {

    ArrayList<HouseOrPerson> arrayList= new ArrayList<>();
    private Button  btnMakeArrayRequest;
    private TextView txtResponse;
    // temporary string to show the parsed response
    private String jsonResponse="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_insert);

        btnMakeArrayRequest = (Button) findViewById(R.id.btnArrayRequest);
        txtResponse = (TextView) findViewById(R.id.txtResponse);



        btnMakeArrayRequest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BackgroundTask bg = new BackgroundTask();
                arrayList=bg.makeJsonArrayRequest();

                for (int x=0; x<arrayList.size(); x++){
                    jsonResponse +=Integer.toString(arrayList.get(x).getId())
                            + arrayList.get(x).getName()
                            + Integer.toString(arrayList.get(x).getBalance())+ "\n\n";

                }

                txtResponse.setText(jsonResponse);
            }
        });

    }

}

Arent you missing a constructor in your BackgroundTask? 您是否在BackgroundTask中缺少构造函数?

Try putting System.out.println(arrayList.size()) before you return it in your BackgroundTask. 尝试将System.out.println(arrayList.size())放回BackgroundTask中之前。 What is the size of it? 它的大小是多少?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM