2017-02-19 35 views
0

對於Android而言,新的Im和dev試圖連接服務器並獲取Json響應的應用程序,將其解析爲類並使其可用。嘗試在空對象引用上調用接口方法<MyInterfaceMethord>參考

伊夫implimented 3類此

  1. 公共類客戶{}
  2. 公共類ServerConnect {}
  3. 公共類JsonParser {}

的Serverconnect使用凌空庫下載異步線程上的網頁源代碼。下載後,Server Connect類啓動一個onServerResponded(String responce)列表器。這個響應是JsonParser類的輸入。在JsonParser類成功獲取客戶列表之後,它激發另一個名爲onCustomersParsed(List customers)的列表器。稍後處理在onCustomersParsed回調內完成。

但即時得到一個致命的異常..

嘗試調用接口方法 '無效 app.utilities.JsonParser $ OnCustomersParserListner.onCustomersParsed()' 上的空對象引用

我盡力而爲,但失敗了。這裏是我的代碼

package app.elements; 

/** 
* Created by Sangeeth Nandakumar on 13-02-2017. 
*/ 

public class Customer 
{ 
    private String id; 
    private String firstname; 
    private String lastname; 
    private String device; 
    private String gender; 

    public Customer(String id, String firstname, String lastname, String device,String gender) 
    { 
     this.id = id; 
     this.firstname = firstname; 
     this.lastname = lastname; 
     this.device = device; 
     this.gender = gender; 
    } 

    public String getGender() { 
     return gender; 
    } 

    public void setGender(String gender) { 
     this.gender = gender; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getFirstname() { 
     return firstname; 
    } 

    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 

    public String getDevice() { 
     return device; 
    } 

    public void setDevice(String device) { 
     this.device = device; 
    } 
} 

THIS IS MY服務器連接器類

package app.utilities; 

import android.content.Context; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 

/** 
* Created by Sangeeth Nandakumar on 18-02-2017. 
* Highly optimised Google's Volley driven async webpage source downloader 
*/ 

public class ServerConnector 
{ 
    //Member variables 
    private Context context; 

    //Override interfaces 
    public interface OnServerStatusListner 
    { 
     public void onServerResponded(String responce); 
     public void onServerRevoked(); 
    } 

    //New listner 
    private OnServerStatusListner listner; 

    //Listner function 
    public void setOnServerStatusListner(OnServerStatusListner myststus) 
    { 
     listner=myststus; 
    } 

    //Constructor 
    public ServerConnector(Context context) 
    { 
     this.context = context; 
    } 

    //Connect to server 
    public void connectServer(String url) 
    { 
     //Create a request queue 
     RequestQueue queue= Volley.newRequestQueue(context); 
     //Tunnel the request 
     StringRequest stringRequest=new StringRequest(Request.Method.GET, url, 
       //When request success 
       new Response.Listener<String>() 
       { 
        @Override 
        public void onResponse(String response) 
        { 
         listner.onServerResponded(response); 
        } 
       }, 
       //When request fails 
       new Response.ErrorListener() 
       { 
        @Override 
        public void onErrorResponse(VolleyError error) 
        { 
         listner.onServerRevoked(); 
        } 
       }); 
     //Add the request to queue 
     queue.add(stringRequest); 
    } 

} 

THIS IS MY JSON解析器類

package app.utilities; 

import android.content.Context; 
import android.widget.Toast; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.util.ArrayList; 
import java.util.List; 
import app.elements.Customer; 

/** 
* Created by Sangeeth Nandakumar on 18-02-2017. 
* Highly optimised Json parserclass with multiple listners 
*/ 

public class JsonParser 
{ 
    //Data members 
    private Context context; 
    private String jsontext; 
    private List<Customer> customers=new ArrayList<>(); 

    //Listner object 
    public OnCustomersParserListner listner; 

    //Listners 
    public interface OnCustomersParserListner 
    { 
     public void onCustomersParsed(List<Customer> customers); 
    } 

    //On Jsonparse listner 
    public void setOnJsonParseListner(OnCustomersParserListner mylistner) 
    { 
     listner=mylistner; 
    } 

    //Constructor 
    public JsonParser(Context context, String jsontext) 
    { 
     this.context = context; 
     this.jsontext = jsontext; 
    } 

    //Json pre-parsing 
    public void parseCustomers() 
    { 
     // If json is true 
     if (jsontext != null) 
     { 
      try 
      { 
       //Create a JSON object 
       JSONObject jsonObj = new JSONObject(jsontext); 
       // Getting JSON Array node 
       JSONArray json = jsonObj.getJSONArray("details"); 
       // Looping through All Contacts 
       for (int i = 0; i < json.length(); i++) 
       { 
        JSONObject details = json.getJSONObject(i); 
        //Get all customer details from JSON file 
        String id = details.getString("id"); 
        String firstname = details.getString("firstname"); 
        String lastname = details.getString("lastname"); 
        String device = details.getString("device"); 
        String gender = details.getString("gender"); 
        //Add to list 
        customers.add(new Customer(id,firstname,lastname,device,gender)); 
       } 
       listner.onCustomersParsed(customers); 
      } 
      catch (final JSONException e) 
      { 
       Toast.makeText(context, "Error in parsing JSON", Toast.LENGTH_SHORT).show(); 
      } 
     } 
     else 
     { 
      Toast.makeText(context, "JSON text is empty", Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 

這一點與主要活動通話

ServerConnector server=new ServerConnector(this); 
server.connectServer("http://amazinginside.esy.es/customerlist.php"); 

server.setOnServerStatusListner(new ServerConnector.OnServerStatusListner() 
{ 
    @Override 
    public void onServerResponded(String responce) 
    { 
     Toast.makeText(MainActivity.this, "Server responded",  Toast.LENGTH_SHORT).show(); 
     JsonParser parser=new JsonParser(getApplicationContext(),responce); 
     parser.parseCustomers(); 
     parser.setOnJsonParseListner(new JsonParser.OnCustomersParserListner() { 
      @Override 
      public void onCustomersParsed(List<Customer> customers) { 
       Toast.makeText(MainActivity.this, customers.get(0).getFirstname(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 
    @Override 
    public void onServerRevoked() 
    { 
     Toast.makeText(MainActivity.this, "Connection to server broke", Toast.LENGTH_SHORT).show(); 
    } 
}); 

任何人都可以幫我

+0

嘗試更改設置偵聽程序的順序並在MainActivity中調用parseCustomers。 – Sanjeet

回答

0

您正在設置聽衆,然後請求parsing。嘗試改變順序。

@Override 
public void onServerResponded(String responce) 
{ 
    Toast.makeText(MainActivity.this, "Server responded",  Toast.LENGTH_SHORT).show(); 
    JsonParser parser=new JsonParser(getApplicationContext(),responce); 
    parser.setOnJsonParseListner(new JsonParser.OnCustomersParserListner() { 
     @Override 
     public void onCustomersParsed(List<Customer> customers) { 
      Toast.makeText(MainActivity.this, customers.get(0).getFirstname(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    parser.parseCustomers(); 

} 
+0

真是一個愚蠢的我!謝謝,我的朋友。現在一切正常,如你所說。謝謝 –

相關問題