Java 在JsonArrayRequest中填充给定null的Recycleview

Java 在JsonArrayRequest中填充给定null的Recycleview,java,php,android,nullpointerexception,android-volley,Java,Php,Android,Nullpointerexception,Android Volley,我有这段代码,我正试图从Android Studio的PHP脚本中获取JSON代码,然后获取图像url和名称,以绘制带有一些列表的RecycleView,并填充它…我总是从JSON\u DATA\u WEB\u CALL()方法中的JsonArrayRequest接收NullPointerException,我的脑袋快要爆炸了,我找不到解决方案PHP也经过测试,可以正常工作,它正确地显示了一个JSON,任何帮助都会很好。Thx提前。代码如下: getData.php <?php

我有这段代码,我正试图从Android Studio的PHP脚本中获取JSON代码,然后获取图像url和名称,以绘制带有一些列表的RecycleView,并填充它…我总是从
JSON\u DATA\u WEB\u CALL()
方法中的
JsonArrayRequest
接收
NullPointerException
,我的脑袋快要爆炸了,我找不到解决方案
PHP
也经过测试,可以正常工作,它正确地显示了一个
JSON
,任何帮助都会很好。Thx提前。代码如下:

getData.php

<?php

    //importing Config file
    include 'include/Config.php';

    // Create connection
    $conn = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE);

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    $sql ="SELECT * FROM imageplums";
    $result = $conn->query($sql);

    if ($result->num_rows >0) {
        // output data of each row
        while($row[] = $result->fetch_assoc()) {
            $tem = $row;
            $json = json_encode($tem);
        }
    } else {
        echo "0 results";
    }

    echo $json;
    $conn->close();
?>

MainActivity.Java

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {
    public TextView text;
    public static String MAIL_KEY; 
    RecyclerView recyclerView;
    RecyclerView.Adapter pAdapter;
    RecyclerView.LayoutManager recyclerViewlayoutManager;
    List<PlumImage> plumList;

    String GET_JSON_DATA_HTTP_URL = "http://192.168.1.39:8080/plumster/getdata.php";
    String JSON_IMAGE_TITLE_NAME = "image_title";
    String JSON_IMAGE_URL = "image_url";

    JsonArrayRequest jsonArrayRequest ;
    RequestQueue requestQueue ;

    private SessionManager session;
    private SQLiteHandler db;


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

    plumList=new ArrayList<>();

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            addPlum();
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); //Creamos Navigationview que corresponde a nav_header_main.xml
    navigationView.setNavigationItemSelectedListener(this);
    View header=navigationView.getHeaderView(0); 
    text=(TextView)header.findViewById(R.id.textViewEmail);

    // SqLite database handler
    db = new SQLiteHandler(getApplicationContext());

    // session manager
    session = new SessionManager(getApplicationContext());


    // Fetching user details from sqlite
    HashMap<String, String> user = db.getUserDetails();

    MAIL_KEY = user.get("email");



    recyclerView=(RecyclerView) findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);
    recyclerViewlayoutManager = new LinearLayoutManager(this);

    recyclerView.setLayoutManager(recyclerViewlayoutManager);
    //recyclerView.setLayoutManager(new GridLayoutManager(this,2));
    JSON_DATA_WEB_CALL();

}



public void JSON_DATA_WEB_CALL() {
    //Showing a progress dialog
    //final ProgressDialog loading = ProgressDialog.show(this, "Loading data", "Please wait...", false, false);

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL,

            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    JSON_PARSE_DATA_AFTER_WEBCALL(response);
                    //loading.dismiss();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                    Toast.makeText(getApplicationContext(),
                            error.networkResponse.toString(), Toast.LENGTH_LONG)
                            .show();
                }
            });

    requestQueue = Volley.newRequestQueue(this);

    requestQueue.add(jsonArrayRequest);
}

//This method will parse json data
public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){

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

       PlumImage plumImage = new PlumImage();

        JSONObject json = null;
        try {

            json = array.getJSONObject(i);

            plumImage.setName(json.getString(JSON_IMAGE_TITLE_NAME));

            plumImage.setPhoto(json.getString(JSON_IMAGE_URL));

        } catch (JSONException e) {

            e.printStackTrace();
        }
        plumList.add(plumImage);
    }

    pAdapter = new PlumAdapter(plumList, this);

    recyclerView.setAdapter(pAdapter);
}
public类MainActivity扩展了AppCompatActivity
实现NavigationView.OnNavigationItemSelectedListener{
公共文本查看文本;
公共静态字符串邮件密钥;
回收视图回收视图;
回收视图。适配器pAdapter;
RecyclerView.LayoutManager recyclerViewlayoutManager;
名单;
字符串GET_JSON_DATA_HTTP_URL=”http://192.168.1.39:8080/plumster/getdata.php";
字符串JSON\u IMAGE\u TITLE\u NAME=“IMAGE\u TITLE”;
字符串JSON\u IMAGE\u URL=“IMAGE\u URL”;
JsonArrayRequest JsonArrayRequest;
请求队列请求队列;
私人会话管理器会话;
私有SQLiteHandler数据库;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
plumList=新的ArrayList();
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
addPlum();
}
});
抽屉布局抽屉=(抽屉布局)findViewById(R.id.抽屉布局);
ActionBarDrawerToggle切换=新建ActionBarDrawerToggle(
这,抽屉,工具栏,R.string.navigation\u drawer\u open,R.string.navigation\u drawer\u close);
抽屉。设置抽屉定位器(开关);
toggle.syncState();
NavigationView NavigationView=(NavigationView)findViewById(R.id.nav_视图);//Creamos NavigationView que对应于一个nav_标题_main.xml
navigationView.setNavigationItemSelectedListener(此);
视图标题=navigationView.getHeaderView(0);
text=(TextView)header.findViewById(R.id.textViewEmail);
//SqLite数据库处理程序
db=新的SQLiteHandler(getApplicationContext());
//会话管理器
session=newsessionmanager(getApplicationContext());
//从sqlite获取用户详细信息
HashMap user=db.getUserDetails();
MAIL_KEY=user.get(“电子邮件”);
recyclerView=(recyclerView)findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerViewlayoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(recyclerViewlayoutManager);
//setLayoutManager(新的GridLayoutManager(this,2));
JSON_DATA_WEB_CALL();
}
public void JSON_DATA_WEB_CALL(){
//显示进度对话框
//final ProgressDialog loading=ProgressDialog.show(这是“正在加载数据”,“请稍候…”,false,false);
JsonArrayRequest JsonArrayRequest=新的JsonArrayRequest(获取JSON数据、HTTP URL、,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
JSON在WEBCALL之后解析数据(响应);
//loading.dispose();
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(getApplicationContext(),
错误.networkResponse.toString(),Toast.LENGTH\u LONG)
.show();
}
});
requestQueue=Volley.newRequestQueue(this);
add(jsonArrayRequest);
}
//此方法将解析json数据
public void JSON\u解析\u数据\u WEBCALL之后(JSONArray数组){

对于(int i=0;i问题已经解决,这是PHP代码返回空答案的问题。无论如何,谢谢。

您可以指定在代码中的何处获得NPE吗?在JSON数据WEB调用方法中,当我创建jsonarrayrequest变量时,它总是返回空值,我在MySQL数据库中有两条记录,所以它不应该为空…请你的问题和后堆栈跟踪。很高兴你得到了它的工作。顺便说一句,当问问题时,请提供尽可能多的信息。你从来没有指定你得到NPE的确切位置。你提到了一个方法,但堆栈跟踪会显示你的确切位置。我们需要知道,以帮助你,因为方法是y您提到的是19行代码。我还建议您查看改型2。我发现使用它比截击更好。