我是Android编程的新手,并且很长时间没有使用过Java,所以请原谅我,如果这是noobish。 我在调试日志中遇到了几个NPE错误,但程序似乎确实在运行,我打算做的就是连接到PHP Web服务(自托管)并将一些JSON值输出到显示器。 对不起,我知道代码很乱,如果有帮助我会整理一下。
只是为了重新迭代,代码正在做它应该做的事情,即输出' Froyo Android 2.2'到Android模拟器。我只是想确定为什么会出现这些错误。
package com.sft.androidwebservtest.app;
import android.os.AsyncTask;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import org.apache.http.client.HttpClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
private String jsonResult;
//private String url = "http://cpriyankara.coolpage.biz/employee_details.php";
private String url = "http://192.168.0.2/testws.php";
//private ListView listView;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
//listView = (ListView) findViewById(R.id.listView1);
textView = (TextView)findViewById(R.id.output);
accessWebService();
//
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
//
// Async Task to access the web
private class JsonReadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0]);
try {
HttpResponse response = httpclient.execute(httppost);
jsonResult = inputStreamToString(
response.getEntity().getContent()).toString();
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private StringBuilder inputStreamToString(InputStream is) {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((rLine = rd.readLine()) != null) {
answer.append(rLine);
}
}
catch (IOException e) {
// e.printStackTrace();
Toast.makeText(getApplicationContext(),
"Error..." + e.toString(), Toast.LENGTH_LONG).show();
}
return answer;
}
@Override
protected void onPostExecute(String result) {
ListDrwaer();
}
}// end async task
public void accessWebService() {
JsonReadTask task = new JsonReadTask();
// passes values for the urls string array
task.execute(new String[] { url });
}
// build hash set for list view
//public void ListDrwaer1() {
// List<Map<String, String>> employeeList = new ArrayList<Map<String, String>>();
//
// try {
// JSONObject jsonResponse = new JSONObject(jsonResult);
// JSONArray jsonMainNode = jsonResponse.optJSONArray("emp_info");
//
// for (int i = 0; i < jsonMainNode.length(); i++) {
// JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
// String name = jsonChildNode.optString("employee name");
// String number = jsonChildNode.optString("employee no");
// String outPut = name + "-" + number;
// employeeList.add(createEmployee("employees", outPut));
// }
// } catch (JSONException e) {
// Toast.makeText(getApplicationContext(), "Error" + e.toString(),
// Toast.LENGTH_SHORT).show();
// }
//
// SimpleAdapter simpleAdapter = new SimpleAdapter(this, employeeList,
// android.R.layout.simple_list_item_1,
// new String[] { "employees" }, new int[] { android.R.id.text1 });
// listView.setAdapter(simpleAdapter);
//}
public void ListDrwaer() {
try {
JSONObject jsonResponse = new JSONObject(jsonResult);
String name = jsonResponse.getString("name");
String version = jsonResponse.getString("version");
textView.setText(name + " - " + version);
//JSONArray jsonMainNode = jsonResponse.optJSONArray("emp_info");
//for (int i = 0; i < jsonMainNode.length(); i++) {
// JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
// String name = jsonChildNode.optString("employee name");
// String number = jsonChildNode.optString("employee no");
// String outPut = name + "-" + number;
// employeeList.add(createEmployee("employees", outPut));
//}
}
catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Error" + e.toString(),
Toast.LENGTH_SHORT).show();
}
//SimpleAdapter simpleAdapter = new SimpleAdapter(this, employeeList,
// android.R.layout.simple_list_item_1,
// new String[] { "employees" }, new int[] { android.R.id.text1 });
//listView.setAdapter(simpleAdapter);
}
//private HashMap<String, String> createEmployee(String name, String number) {
// HashMap<String, String> employeeNameNo = new HashMap<String, String>();
// employeeNameNo.put(name, number);
// return employeeNameNo;
//}
}
调试日志中的错误:
03-14 16:34:34.750 895-895/com.sft.androidwebservtest.app D/dalvikvm﹕ Not late-enabling CheckJNI (already on)
03-14 16:34:38.330 895-895/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 62K, 5% free 2958K/3088K, paused 142ms, total 158ms
03-14 16:34:38.360 895-895/com.sft.androidwebservtest.app I/dalvikvm-heap﹕ Grow heap (frag case) to 3.558MB for 635812-byte allocation
03-14 16:34:38.500 895-904/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 2K, 4% free 3576K/3712K, paused 139ms, total 139ms
03-14 16:34:39.960 895-895/com.sft.androidwebservtest.app D/﹕ HostConnection::get() New Host Connection established 0xb8d3b4f0, tid 895
03-14 16:34:40.150 895-895/com.sft.androidwebservtest.app W/EGL_emulation﹕ eglSurfaceAttrib not implemented
03-14 16:34:40.170 895-895/com.sft.androidwebservtest.app D/OpenGLRenderer﹕ Enabling debug mode 0
03-14 16:34:40.200 895-895/com.sft.androidwebservtest.app I/Choreographer﹕ Skipped 44 frames! The application may be doing too much work on its main thread.
03-14 17:44:49.914 1159-1159/com.sft.androidwebservtest.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb3b13b90)
03-14 17:44:49.924 1159-1159/com.sft.androidwebservtest.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.sft.androidwebservtest.app, PID: 1159
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.sft.androidwebservtest.app/com.sft.androidwebservtest.app.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2102)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
at android.app.ActivityThread.access$700(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1883)
at com.sft.androidwebservtest.app.MainActivity.<init>(MainActivity.java:53)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)
at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2093)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
at android.app.ActivityThread.access$700(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
03-14 17:47:08.534 1205-1205/com.sft.androidwebservtest.app D/AndroidRuntime﹕ Shutting down VM
03-14 17:47:08.534 1205-1205/com.sft.androidwebservtest.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb3b13b90)
03-14 17:47:08.644 1205-1205/com.sft.androidwebservtest.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.sft.androidwebservtest.app, PID: 1205
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.sft.androidwebservtest.app/com.sft.androidwebservtest.app.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2102)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
at android.app.ActivityThread.access$700(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1883)
at com.sft.androidwebservtest.app.MainActivity.<init>(MainActivity.java:53)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)
at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2093)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
at android.app.ActivityThread.access$700(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
03-14 17:47:12.024 1205-1205/com.sft.androidwebservtest.app I/Process﹕ Sending signal. PID: 1205 SIG: 9
03-14 17:53:34.054 1250-1250/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 70K, 5% free 2958K/3096K, paused 59ms, total 62ms
03-14 17:53:34.074 1250-1250/com.sft.androidwebservtest.app I/dalvikvm-heap﹕ Grow heap (frag case) to 3.558MB for 635812-byte allocation
03-14 17:53:34.124 1250-1259/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 2K, 4% free 3576K/3720K, paused 48ms, total 48ms
03-14 17:53:34.534 1250-1250/com.sft.androidwebservtest.app D/﹕ HostConnection::get() New Host Connection established 0xb8e16df8, tid 1250
03-14 17:53:34.814 1250-1250/com.sft.androidwebservtest.app W/EGL_emulation﹕ eglSurfaceAttrib not implemented
03-14 17:53:34.824 1250-1250/com.sft.androidwebservtest.app D/OpenGLRenderer﹕ Enabling debug mode 0
03-14 17:53:36.104 1250-1250/com.sft.androidwebservtest.app D/AndroidRuntime﹕ Shutting down VM
03-14 17:53:36.104 1250-1250/com.sft.androidwebservtest.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb3b13b90)
03-14 17:53:36.144 1250-1250/com.sft.androidwebservtest.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.sft.androidwebservtest.app, PID: 1250
java.lang.NullPointerException
at com.sft.androidwebservtest.app.MainActivity.ListDrwaer(MainActivity.java:179)
at com.sft.androidwebservtest.app.MainActivity$JsonReadTask.onPostExecute(MainActivity.java:133)
at com.sft.androidwebservtest.app.MainActivity$JsonReadTask.onPostExecute(MainActivity.java:93)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
03-14 17:53:39.664 1250-1250/com.sft.androidwebservtest.app I/Process﹕ Sending signal. PID: 1250 SIG: 9
03-14 17:54:22.124 1299-1299/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 74K, 5% free 2958K/3100K, paused 50ms, total 53ms
03-14 17:54:22.134 1299-1299/com.sft.androidwebservtest.app I/dalvikvm-heap﹕ Grow heap (frag case) to 3.558MB for 635812-byte allocation
03-14 17:54:22.244 1299-1308/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 2K, 4% free 3576K/3724K, paused 108ms, total 108ms
03-14 17:54:22.534 1299-1299/com.sft.androidwebservtest.app D/﹕ HostConnection::get() New Host Connection established 0xb8d3b4f0, tid 1299
03-14 17:54:22.694 1299-1299/com.sft.androidwebservtest.app W/EGL_emulation﹕ eglSurfaceAttrib not implemented
03-14 17:54:22.704 1299-1299/com.sft.androidwebservtest.app D/OpenGLRenderer﹕ Enabling debug mode 0
03-14 17:54:23.324 1299-1299/com.sft.androidwebservtest.app D/AndroidRuntime﹕ Shutting down VM
03-14 17:54:23.324 1299-1299/com.sft.androidwebservtest.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb3b13b90)
03-14 17:54:23.384 1299-1299/com.sft.androidwebservtest.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.sft.androidwebservtest.app, PID: 1299
java.lang.NullPointerException
at com.sft.androidwebservtest.app.MainActivity.ListDrwaer(MainActivity.java:179)
at com.sft.androidwebservtest.app.MainActivity$JsonReadTask.onPostExecute(MainActivity.java:133)
at com.sft.androidwebservtest.app.MainActivity$JsonReadTask.onPostExecute(MainActivity.java:93)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
03-14 17:54:28.174 1299-1299/com.sft.androidwebservtest.app I/Process﹕ Sending signal. PID: 1299 SIG: 9
03-14 18:01:53.764 1347-1347/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 78K, 5% free 2958K/3104K, paused 57ms, total 60ms
03-14 18:01:53.784 1347-1347/com.sft.androidwebservtest.app I/dalvikvm-heap﹕ Grow heap (frag case) to 3.558MB for 635812-byte allocation
03-14 18:01:53.834 1347-1356/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 2K, 5% free 3576K/3728K, paused 49ms, total 49ms
03-14 18:01:54.214 1347-1347/com.sft.androidwebservtest.app D/﹕ HostConnection::get() New Host Connection established 0xb8e170a8, tid 1347
03-14 18:01:54.324 1347-1347/com.sft.androidwebservtest.app W/EGL_emulation﹕ eglSurfaceAttrib not implemented
03-14 18:01:54.354 1347-1347/com.sft.androidwebservtest.app D/OpenGLRenderer﹕ Enabling debug mode 0
03-14 18:01:55.244 1347-1347/com.sft.androidwebservtest.app D/AndroidRuntime﹕ Shutting down VM
03-14 18:01:55.244 1347-1347/com.sft.androidwebservtest.app W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb3b13b90)
03-14 18:01:55.254 1347-1347/com.sft.androidwebservtest.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.sft.androidwebservtest.app, PID: 1347
java.lang.NullPointerException
at com.sft.androidwebservtest.app.MainActivity.ListDrwaer(MainActivity.java:179)
at com.sft.androidwebservtest.app.MainActivity$JsonReadTask.onPostExecute(MainActivity.java:133)
at com.sft.androidwebservtest.app.MainActivity$JsonReadTask.onPostExecute(MainActivity.java:93)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
03-14 18:01:59.114 1347-1347/com.sft.androidwebservtest.app I/Process﹕ Sending signal. PID: 1347 SIG: 9
03-14 18:05:19.344 1396-1396/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 82K, 5% free 2958K/3108K, paused 50ms, total 52ms
03-14 18:05:19.354 1396-1396/com.sft.androidwebservtest.app I/dalvikvm-heap﹕ Grow heap (frag case) to 3.558MB for 635812-byte allocation
03-14 18:05:19.404 1396-1405/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 2K, 5% free 3576K/3732K, paused 46ms, total 46ms
03-14 18:05:19.854 1396-1396/com.sft.androidwebservtest.app D/﹕ HostConnection::get() New Host Connection established 0xb8cd4a08, tid 1396
03-14 18:05:19.964 1396-1396/com.sft.androidwebservtest.app W/EGL_emulation﹕ eglSurfaceAttrib not implemented
03-14 18:05:19.984 1396-1396/com.sft.androidwebservtest.app D/OpenGLRenderer﹕ Enabling debug mode 0
03-14 18:07:16.444 1438-1438/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 85K, 5% free 2958K/3112K, paused 61ms, total 64ms
03-14 18:07:16.454 1438-1438/com.sft.androidwebservtest.app I/dalvikvm-heap﹕ Grow heap (frag case) to 3.558MB for 635812-byte allocation
03-14 18:07:16.504 1438-1447/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 2K, 5% free 3576K/3736K, paused 46ms, total 46ms
03-14 18:07:16.814 1438-1438/com.sft.androidwebservtest.app D/﹕ HostConnection::get() New Host Connection established 0xb8d3b4f0, tid 1438
03-14 18:07:16.944 1438-1438/com.sft.androidwebservtest.app W/EGL_emulation﹕ eglSurfaceAttrib not implemented
03-14 18:07:16.954 1438-1438/com.sft.androidwebservtest.app D/OpenGLRenderer﹕ Enabling debug mode 0
03-14 18:11:11.324 1482-1482/com.sft.androidwebservtest.app D/﹕ HostConnection::get() New Host Connection established 0xb8e12550, tid 1482
03-14 18:11:11.464 1482-1482/com.sft.androidwebservtest.app W/EGL_emulation﹕ eglSurfaceAttrib not implemented
03-14 18:11:11.504 1482-1482/com.sft.androidwebservtest.app D/OpenGLRenderer﹕ Enabling debug mode 0
03-14 18:11:12.784 1482-1495/com.sft.androidwebservtest.app D/dalvikvm﹕ GC_FOR_ALLOC freed 255K, 10% free 3027K/3348K, paused 54ms, total 54ms
答案 0 :(得分:0)
我重新格式化并重构了Android studio 0.5.1中菜单选项中的代码,似乎已停止显示错误。