Android 将错误获取为java.lang.NullPointerException
我是Android(java)的新手,我正在开发一个简单的应用程序,它将调用webservice(Json webservice)并将数据绑定到Android:listview。 我创建了JSON Web服务,并测试了它是否工作正常。在android中,当我给出JSON WS URL并执行该程序时,意味着它将错误显示为Android 将错误获取为java.lang.NullPointerException,android,json,web-services,Android,Json,Web Services,我是Android(java)的新手,我正在开发一个简单的应用程序,它将调用webservice(Json webservice)并将数据绑定到Android:listview。 我创建了JSON Web服务,并测试了它是否工作正常。在android中,当我给出JSON WS URL并执行该程序时,意味着它将错误显示为 java.lang.NullPointerException at com.example.cargo.MainActivity$JSONParse.onPostExecute(
java.lang.NullPointerException at com.example.cargo.MainActivity$JSONParse.onPostExecute(MainActivity.java:113)
在第113行中
Cargo = json.getJSONArray(TAG_Track);
不知道出了什么问题。在过去的4天里,我一直被这个问题困扰着。
这是我的主要活动代码:
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
//import learn2crack.listview.library.JSONParser;
public class MainActivity extends Activity {
ListView listView1;
TextView textView1;
//TextView name;
//TextView api;
Button button1;
ArrayList<HashMap<String, String>> Track= new ArrayList<HashMap<String, String>>();
//URL to get JSON Array
private static String url = "http://192.168.1.126/testing/CService.asmx";
//JSON Node Names
private static final String TAG_Track = "Track";
private static final String TAG_Status = "Status";
JSONArray Cargo = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Track = new ArrayList<HashMap<String, String>>();
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new JSONParse().execute();
}
});
}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
textView1 = (TextView)findViewById(R.id.textView1);
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl(url);
return json;
}
@Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
try {
// Getting JSON Array from URL
Cargo = json.getJSONArray(TAG_Track);
for(int i = 0; i < Cargo.length(); i++){
JSONObject c = Cargo.getJSONObject(i);
// Storing JSON item in a Variable
String Status = c.getString(TAG_Status);
//String name = c.getString(TAG_NAME);
// Adding value HashMap key => value
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_Status, Status);
Track.add(map);
listView1=(ListView)findViewById(R.id.listView1);
ListAdapter adapter = new SimpleAdapter(MainActivity.this, Track,
R.layout.listview,
new String[] { TAG_Status }, new int[] {
R.id.textView1});
listView1.setAdapter(adapter);
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "You Clicked at "+Track.get(+position).get("Status"), Toast.LENGTH_SHORT).show();
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
这是我的日志:
04-05 12:55:38.132: E/JSON Parser(768): Error parsing data org.json.JSONException: Value <?xml of type java.lang.String cannot be converted to JSONObject
04-05 12:55:38.172: E/AndroidRuntime(768): FATAL EXCEPTION: main
04-05 12:55:38.172: E/AndroidRuntime(768): java.lang.NullPointerException
04-05 12:55:38.172: E/AndroidRuntime(768): at com.example.cargo.MainActivity$JSONParse.onPostExecute(MainActivity.java:113)
04-05 12:55:38.172: E/AndroidRuntime(768): at com.example.cargo.MainActivity$JSONParse.onPostExecute(MainActivity.java:1)
04-05 12:55:38.172: E/AndroidRuntime(768): at android.os.AsyncTask.finish(AsyncTask.java:590)
04-05 12:55:38.172: E/AndroidRuntime(768): at android.os.AsyncTask.access$600(AsyncTask.java:149)
04-05 12:55:38.172: E/AndroidRuntime(768): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:603)
04-05 12:55:38.172: E/AndroidRuntime(768): at android.os.Handler.dispatchMessage(Handler.java:99)
04-05 12:55:38.172: E/AndroidRuntime(768): at android.os.Looper.loop(Looper.java:132)
04-05 12:55:38.172: E/AndroidRuntime(768): at android.app.ActivityThread.main(ActivityThread.java:4123)
04-05 12:55:38.172: E/AndroidRuntime(768): at java.lang.reflect.Method.invokeNative(Native Method)
04-05 12:55:38.172: E/AndroidRuntime(768): at java.lang.reflect.Method.invoke(Method.java:491)
04-05 12:55:38.172: E/AndroidRuntime(768): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
04-05 12:55:38.172: E/AndroidRuntime(768): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
04-05 12:55:38.172: E/AndroidRuntime(768): at dalvik.system.NativeStart.main(Native Method)
04-05 12:55:38.132:E/JSON解析器(768):解析数据org.JSON.JSONException:Value时出错您正在postExecute中执行主操作。PostExecute用于显示UI。在doInBackground中使用它,并在postExecute中显示结果UI
所有执行的都是jsonparsing,显示在doInBackground中
void doInBackground()
{
try {
// Getting JSON Array from URL
//heavy operation like parsing do here..
Cargo = json.getJSONArray(TAG_Track);
for(int i = 0; i < Cargo.length(); i++){
JSONObject c = Cargo.getJSONObject(i);
// Storing JSON item in a Variable
String Status = c.getString(TAG_Status);
//String name = c.getString(TAG_NAME);
// Adding value HashMap key => value
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_Status, Status);
Track.add(map);
}
void onPostExecute(JSONObject json) {
{
//just to display UI. use it in postExecute.
listView1=(ListView)findViewById(R.id.listView1);
ListAdapter adapter = new SimpleAdapter(MainActivity.this, Track,
R.layout.listview,
new String[] { TAG_Status }, new int[] {
R.id.textView1});
listView1.setAdapter(adapter);
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "You Clicked at "+Track.get(+position).get("Status"), Toast.LENGTH_SHORT).show();
}
});
}
}
void doInBackground()
{
试一试{
//从URL获取JSON数组
//像解析这样的繁重操作在这里执行。。
Cargo=json.getJSONArray(TAG_Track);
对于(int i=0;ivalue
HashMap=newHashMap();
地图放置(标签状态、状态);
轨迹。添加(地图);
}
void onPostExecute(JSONObject json){
{
//只是为了显示UI。在postExecute中使用它。
listView1=(ListView)findViewById(R.id.listView1);
ListAdapter=new SimpleAdapter(MainActivity.this,Track,
R.layout.listview,
新字符串[]{TAG_Status},新int[]{
R.id.textView1});
listView1.setAdapter(适配器);
listView1.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Toast.makeText(MainActivity.this),您在“+Track.get(+position.get”(“Status”)、Toast.LENGTH_SHORT.show()处单击过它;
}
});
}
}
试试这个
public class MainActivity extends Activity {
ListView listView1;
TextView textView1;
//TextView name;
//TextView api;
Button button1;
ArrayList<HashMap<String, String>> Track= new ArrayList<HashMap<String, String>>();
//URL to get JSON Array
private static String url = "http://192.168.1.126/testing/CService.asmx";
//JSON Node Names
private static final String TAG_Track = "Track";
private static final String TAG_Status = "Status";
JSONArray Cargo = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Track = new ArrayList<HashMap<String, String>>();
button1 = (Button)findViewById(R.id.button1);
listView1=(ListView)findViewById(R.id.listView1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new JSONParse().execute();
}
});
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "You Clicked at "+Track.get(+position).get("Status"), Toast.LENGTH_SHORT).show();
}
});
}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
textView1 = (TextView)findViewById(R.id.textView1);
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl(url);
Cargo = json.getJSONArray(TAG_Track);
for(int i = 0; i < Cargo.length(); i++){
JSONObject c = Cargo.getJSONObject(i);
}
// Storing JSON item in a Variable
String Status = c.getString(TAG_Status);
//String name = c.getString(TAG_NAME);
// Adding value HashMap key => value
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_Status, Status);
Track.add(map);
return json;
}
@Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
try {
// Getting JSON Array from URL
ListAdapter adapter = new SimpleAdapter(MainActivity.this, Track,
R.layout.listview,
new String[] { TAG_Status }, new int[] {
R.id.textView1});
listView1.setAdapter(adapter);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
公共类MainActivity扩展活动{
列表视图列表视图1;
文本视图文本视图1;
//文本视图名称;
//TextView api;
按钮1;
ArrayList轨迹=新的ArrayList();
//获取JSON数组的URL
专用静态字符串url=”http://192.168.1.126/testing/CService.asmx";
//JSON节点名称
私有静态最终字符串标记_Track=“Track”;
私有静态最终字符串标记_Status=“Status”;
JSONArray Cargo=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Track=newarraylist();
button1=(按钮)findViewById(R.id.button1);
listView1=(ListView)findViewById(R.id.listView1);
button1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
新建JSONParse().execute();
}
});
listView1.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Toast.makeText(MainActivity.this),您在“+Track.get(+position.get”(“Status”)、Toast.LENGTH_SHORT.show()处单击过它;
}
});
}
私有类JSONParse扩展了异步任务{
私人对话;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
textView1=(TextView)findViewById(R.id.textView1);
pDialog=新建进度对话框(MainActivity.this);
setMessage(“获取数据…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
@凌驾
受保护的JSONObject doInBackground(字符串…args){
JSONParser jParser=新的JSONParser();
//从URL获取JSON
JSONObject json=jParser.getJSONFromUrl(url);
Cargo=json.getJSONArray(TAG_Track);
对于(int i=0;ivalue
HashMap=newHashMap();
public class MainActivity extends Activity {
ListView listView1;
TextView textView1;
//TextView name;
//TextView api;
Button button1;
ArrayList<HashMap<String, String>> Track= new ArrayList<HashMap<String, String>>();
//URL to get JSON Array
private static String url = "http://192.168.1.126/testing/CService.asmx";
//JSON Node Names
private static final String TAG_Track = "Track";
private static final String TAG_Status = "Status";
JSONArray Cargo = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Track = new ArrayList<HashMap<String, String>>();
button1 = (Button)findViewById(R.id.button1);
listView1=(ListView)findViewById(R.id.listView1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new JSONParse().execute();
}
});
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "You Clicked at "+Track.get(+position).get("Status"), Toast.LENGTH_SHORT).show();
}
});
}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
textView1 = (TextView)findViewById(R.id.textView1);
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl(url);
Cargo = json.getJSONArray(TAG_Track);
for(int i = 0; i < Cargo.length(); i++){
JSONObject c = Cargo.getJSONObject(i);
}
// Storing JSON item in a Variable
String Status = c.getString(TAG_Status);
//String name = c.getString(TAG_NAME);
// Adding value HashMap key => value
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_Status, Status);
Track.add(map);
return json;
}
@Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
try {
// Getting JSON Array from URL
ListAdapter adapter = new SimpleAdapter(MainActivity.this, Track,
R.layout.listview,
new String[] { TAG_Status }, new int[] {
R.id.textView1});
listView1.setAdapter(adapter);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}