Java 尝试调用接口方法<;MyInterfaceMethod>;关于空对象引用
我是Android新手,正在开发一个应用程序,尝试连接服务器并获取Json响应,将其解析为类并使其可用 为此,我上了三门课Java 尝试调用接口方法<;MyInterfaceMethod>;关于空对象引用,java,android,json,Java,Android,Json,我是Android新手,正在开发一个应用程序,尝试连接服务器并获取Json响应,将其解析为类并使其可用 为此,我上了三门课 公共类客户{} 公共类ServerConnect{} 公共类JsonParser{} Serverconnect使用Volley库在异步线程上下载网页源代码。下载后,Server Connect类启动OnServerResponsed(String Response)listner。此响应是JsonParser类的输入。JsonParser类成功获取客户列表后,将触发另一个
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;
}
}
这是我的服务器连接器类
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);
}
}
package app.utilities;
导入android.content.Context;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
/**
*由Sangeeth Nandakumar于2017年2月18日创建。
*高度优化的谷歌截击驱动异步网页源下载程序
*/
公共类服务器连接器
{
//成员变量
私人语境;
//覆盖接口
ServerStatusListner上的公共接口
{
服务器响应的公共void(字符串响应一次);
服务器上的公共无效已撤销();
}
//新listner
私有OnServerStatusListner-listner;
//Listner函数
public void setOnServerStatusListner(OnServerStatusListner myststus)
{
listner=myststus;
}
//建造师
公共服务器连接器(上下文)
{
this.context=上下文;
}
//连接到服务器
公共服务器(字符串url)
{
//创建请求队列
RequestQueue=Volley.newRequestQueue(上下文);
//通过隧道传送请求
StringRequest StringRequest=新的StringRequest(Request.Method.GET,url,
//当请求成功时
新的Response.Listener()
{
@凌驾
公共void onResponse(字符串响应)
{
onServerResponsed(响应);
}
},
//当请求失败时
新的Response.ErrorListener()
{
@凌驾
公共无效onErrorResponse(截击错误)
{
onServerReversed();
}
});
//将请求添加到队列中
添加(stringRequest);
}
}
这是我的JSON-PARSER类
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();
}
}
}
package app.utilities;
导入android.content.Context;
导入android.widget.Toast;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.List;
导入app.elements.Customer;
/**
*由Sangeeth Nandakumar于2017年2月18日创建。
*具有多个列表器的高度优化的Json parserclass
*/
公共类JsonParser
{
//数据成员
私人语境;
私有字符串jsontext;
private List customers=new ArrayList();
//Listner对象
公共OnCustomersParserListner-listner;
//列表器
客户SparSerListner上的公共接口
{
客户(列出客户)时的公共作废;
}
//关于Jsonparse-listner
public void setOnJsonParseListner(oncustomersparselistner mylistner)
{
listner=mylistner;
}
//建造师
公共JsonParser(上下文,字符串jsontext)
{
this.context=上下文;
this.jsontext=jsontext;
}
//Json预解析
公共服务客户()
{
//如果json为true
if(jsontext!=null)
{
尝试
{
//创建一个JSON对象
JSONObject jsonObj=新的JSONObject(jsontext);
//获取JSON数组节点
JSONArray json=jsonObj.getJSONArray(“详细信息”);
//通过所有触点循环
for(int i=0;i
这是来自主活动的呼叫
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();
}
});
ServerConnector服务器=新的ServerConnector(此);
server.connectServer(“http://amazinginside.esy.es/customerlist.php");
server.setOnServerStatusListner(新的ServerConnector.OnServerStatusListner()
{
@凌驾
服务器上的公共无效已响应(字符串响应一次)
{
Toast.makeText(MainActivity.this,“服务器响应”,Toast.LENGTH_SHORT.show();
@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();
}