Java 在JsonArrayRequest中填充给定null的Recycleview
我有这段代码,我正试图从Android Studio的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
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。我发现使用它比截击更好。