2017-02-27 64 views
0

我有这个代码,我试图从PHP脚本获得JSON代码与Android Studio,并在此之后,获取图像的URL和名称绘制RecycleView一些列表和填充它...我总是从方法接收NullPointerException方法,我的头会爆炸,我没有找到解决方案。 PHP已经过测试,它的工作原理,它正确显示JSON ...任何帮助将是伟大的。 Thx提前。下面是代码:填充Recycleview在JsonArrayRequest中给出null

访问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); 
} 
+1

你能指定你在哪里得到NPE的代码吗? –

+0

在JSON DATA WEB CALL方法中,当我创建jsonarrayrequest变量时,它总是返回null,并且我有两个记录un MySQL Db,所以它不应该为空... – Lopiv2

+0

请** [编辑] **您的问题并发布堆栈跟踪。 – Pang

回答

0

它已经解决了,这是有其返回null回答PHP代码中的问题。无论如何,谢谢。

+0

很高兴你能工作。顺便提一下,请提供尽可能多的信息。你从未指定过你获得NPE的确切位置。你提到了一个方法,但是一个堆栈跟踪会告诉你确切的位置。因为你提到的方法是19行代码,所以我们需要知道这一点。我也建议检查Retrofit2。我觉得比Volley更好。 –