Android ICS httppost NullPointerException
我在尝试访问远程数据库时遇到问题。这个问题只发生在ICS或更高版本上,但在较旧的Android上运行良好。这件事我一辈子都想不出来,我已经坚持了好几个星期了。我真的需要弄明白这一点,这样我就可以在我的另一个更重要的应用程序中使用这个解决方案 任何帮助都将不胜感激。如果需要更多信息,请告诉我 现在,该应用甚至无法启动,启动时会出现以下情况:Android ICS httppost NullPointerException,android,nullpointerexception,http-post,android-4.0-ice-cream-sandwich,Android,Nullpointerexception,Http Post,Android 4.0 Ice Cream Sandwich,我在尝试访问远程数据库时遇到问题。这个问题只发生在ICS或更高版本上,但在较旧的Android上运行良好。这件事我一辈子都想不出来,我已经坚持了好几个星期了。我真的需要弄明白这一点,这样我就可以在我的另一个更重要的应用程序中使用这个解决方案 任何帮助都将不胜感激。如果需要更多信息,请告诉我 现在,该应用甚至无法启动,启动时会出现以下情况: 11-30 15:42:46.970: W/dalvikvm(10028): threadid=1: thread exiting with uncaught
11-30 15:42:46.970: W/dalvikvm(10028): threadid=1: thread exiting with uncaught exception (group=0x40d04210)
11-30 15:42:46.970: E/AndroidRuntime(10028): FATAL EXCEPTION: main
11-30 15:42:46.970: E/AndroidRuntime(10028): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.defsoftsol.db.check/com.defsoftsol.db.check.MainActivity}: java.lang.NullPointerException
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.app.ActivityThread.access$600(ActivityThread.java:123)
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.os.Handler.dispatchMessage(Handler.java:99)
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.os.Looper.loop(Looper.java:137)
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.app.ActivityThread.main(ActivityThread.java:4428)
11-30 15:42:46.970: E/AndroidRuntime(10028): at java.lang.reflect.Method.invokeNative(Native Method)
11-30 15:42:46.970: E/AndroidRuntime(10028): at java.lang.reflect.Method.invoke(Method.java:511)
11-30 15:42:46.970: E/AndroidRuntime(10028): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
11-30 15:42:46.970: E/AndroidRuntime(10028): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
11-30 15:42:46.970: E/AndroidRuntime(10028): at dalvik.system.NativeStart.main(Native Method)
11-30 15:42:46.970: E/AndroidRuntime(10028): Caused by: java.lang.NullPointerException
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.app.Activity.findViewById(Activity.java:1794)
11-30 15:42:46.970: E/AndroidRuntime(10028): at com.defsoftsol.db.check.MainActivity.<init>(MainActivity.java:43)
11-30 15:42:46.970: E/AndroidRuntime(10028): at java.lang.Class.newInstanceImpl(Native Method)
11-30 15:42:46.970: E/AndroidRuntime(10028): at java.lang.Class.newInstance(Class.java:1319)
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
11-30 15:42:46.970: E/AndroidRuntime(10028): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
11-30 15:42:46.970: E/AndroidRuntime(10028): ... 11 more
11-30 15:42:46.970:W/dalvikvm(10028):threadid=1:线程退出时出现未捕获异常(组=0x40d04210)
11-30 15:42:46.970:E/AndroidRuntime(10028):致命异常:主
11-30 15:42:46.970:E/AndroidRuntime(10028):java.lang.RuntimeException:无法实例化活动组件信息{com.defsoftsol.db.check/com.defsoftsol.db.check.MainActivity}:java.lang.NullPointerException
11-30 15:42:46.970:E/AndroidRuntime(10028):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
11-30 15:42:46.970:E/AndroidRuntime(10028):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
11-30 15:42:46.970:E/AndroidRuntime(10028):在android.app.ActivityThread.access$600(ActivityThread.java:123)
11-30 15:42:46.970:E/AndroidRuntime(10028):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
11-30 15:42:46.970:E/AndroidRuntime(10028):在android.os.Handler.dispatchMessage(Handler.java:99)上
11-30 15:42:46.970:E/AndroidRuntime(10028):在android.os.Looper.loop(Looper.java:137)
11-30 15:42:46.970:E/AndroidRuntime(10028):位于android.app.ActivityThread.main(ActivityThread.java:4428)
11-30 15:42:46.970:E/AndroidRuntime(10028):位于java.lang.reflect.Method.Invokenactive(本机方法)
11-30 15:42:46.970:E/AndroidRuntime(10028):在java.lang.reflect.Method.invoke(Method.java:511)
11-30 15:42:46.970:E/AndroidRuntime(10028):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
11-30 15:42:46.970:E/AndroidRuntime(10028):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
11-30 15:42:46.970:E/AndroidRuntime(10028):在dalvik.system.NativeStart.main(本机方法)
11-30 15:42:46.970:E/AndroidRuntime(10028):由以下原因引起:java.lang.NullPointerException
11-30 15:42:46.970:E/AndroidRuntime(10028):在android.app.Activity.findViewById(Activity.java:1794)
11-30 15:42:46.970:E/AndroidRuntime(10028):位于com.defsoftsol.db.check.MainActivity。(MainActivity.java:43)
11-30 15:42:46.970:E/AndroidRuntime(10028):位于java.lang.Class.newInstanceImpl(本机方法)
11-30 15:42:46.970:E/AndroidRuntime(10028):位于java.lang.Class.newInstance(Class.java:1319)
11-30 15:42:46.970:E/AndroidRuntime(10028):在android.app.Instrumentation.newActivity(Instrumentation.java:1023)上
11-30 15:42:46.970:E/AndroidRuntime(10028):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
11-30 15:42:46.970:E/AndroidRuntime(10028):。。。还有11个
更新代码:(现在是整个应用程序的代码)
公共类MainActivity扩展活动{
字符串deviceID=“”,dateStamp=“”,buff=“”,db_id=“”,db_device_id=“”,db_install_date=“”;
字节[]数据;
HttpPost-HttpPost;
字符串缓冲区;
HttpResponse响应;
HttpClient-HttpClient;
输入流输入流;
列出nameValuePairs;
int-ID,activeinstalls;
长差;
TableLayout tl=(TableLayout)findviewbyd(R.id.db_数据);
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮刷新=(按钮)findViewById(R.id.btnrefresh);
refresh.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
新建MyAsyncTask(MainActivity.this).execute();
}
});
}
@抑制警告(“未使用”)
公共类MyAsyncTask扩展了AsyncTask
{
进程对话框;
私人语境;
公共MyAsyncTask(上下文){
this.context=上下文;
}
@凌驾
受保护的void onPostExecute(void结果){
mProgressDialog.disclose();
}
@凌驾
受保护的void onPreExecute(){
mProgressDialog=ProgressDialog.show(MainActivity.this,“正在加载…”,数据正在加载…”);
}
@凌驾
受保护的Void doInBackground(Void…参数){
更新();
返回null;
}
}
专用最终SimpleDataFormat格式化程序=新SimpleDataFormat(“yyyy-MM-dd”);
私人最终长一天=24*60*60*1000;
@抑制警告(“未使用”)
公共无效更新()
{
int=0;
现在日期=新日期();
dateStamp=formatter.format(现在);
runOnUiThread(新的Runnable(){
@凌驾
public void run(){
ui设置();
}
});
ID=1;
尝试
{
做
{
尝试
{
httpclient=新的DefaultHttpClient();
httppost=new-httppost(“http://#.#.#.#.#//***.php”);//为服务器安全而进行的地址剪切
nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(“_id”,String.valueOf(id));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
response=httpclient.execute(httppost);
inputStream=response.getEntity().getContent();
数据=新字节[256];
buffer=新的StringBuffer();
int len=0;
而(-1!=(len=inputStream.read(data)))
{
append(新字符串(数据,0,len));
public class MainActivity extends Activity {
String deviceID="",dateStamp="",buff="",db_id="",db_device_id="",db_install_date="";
byte[] data;
HttpPost httppost;
StringBuffer buffer;
HttpResponse response;
HttpClient httpclient;
InputStream inputStream;
List<NameValuePair> nameValuePairs;
int ID,activeinstalls;
long diff;
TableLayout tl=(TableLayout)findViewById(R.id.db_data);
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button refresh = (Button)findViewById(R.id.btnrefresh);
refresh.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new MyAsyncTask(MainActivity.this).execute();
}
});
}
@SuppressWarnings("unused")
public class MyAsyncTask extends AsyncTask<Void, Void, Void>
{
ProgressDialog mProgressDialog;
private Context context;
public MyAsyncTask(Context context) {
this.context = context;
}
@Override
protected void onPostExecute(Void result) {
mProgressDialog.dismiss();
}
@Override
protected void onPreExecute() {
mProgressDialog = ProgressDialog.show(MainActivity.this, "Loading...", "Data is Loading...");
}
@Override
protected Void doInBackground(Void... params) {
update();
return null;
}
}
private final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
private final long ONE_DAY = 24 * 60 * 60 * 1000;
@SuppressWarnings("unused")
public void update()
{
int activeinstalls = 0;
Date now = new Date();
dateStamp = formatter.format(now);
runOnUiThread(new Runnable(){
@Override
public void run(){
UISetup();
}
});
ID = 1;
try
{
do
{
try
{
httpclient = new DefaultHttpClient();
httppost = new HttpPost("http://#.#.#.#/***.php"); //Address cut for server security
nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("_id", String.valueOf(ID)));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
response = httpclient.execute(httppost);
inputStream = response.getEntity().getContent();
data = new byte[256];
buffer = new StringBuffer();
int len = 0;
while (-1 != (len = inputStream.read(data)) )
{
buffer.append(new String(data, 0, len));
}
inputStream.close();
} catch (Exception e) {
Toast.makeText(MainActivity.this, "error"+e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
if(buffer.charAt(0)=='Y')
{
ID++;
buff = buffer.toString();
db_id = buff.substring(1, buff.indexOf("."));
db_device_id = buff.substring(buff.indexOf(".")+1, buff.indexOf(","));
db_install_date = buff.substring(buff.indexOf(",")+1, buff.length());
Date before = null;
try {
before = (Date)formatter.parse(db_install_date);
} catch (ParseException e) {
e.printStackTrace();
}
diff = now.getTime() - before.getTime();
runOnUiThread(new Runnable(){
@Override
public void run(){
UIAdd(diff,db_id,db_device_id,db_install_date);
}
});
} else { //IF buffer returns N
// TODO: Fill in
}
} while(buffer.charAt(0)=='Y');
UIFinish();
} catch(Exception err) {
err.printStackTrace();
}
}
@SuppressWarnings("deprecation")
public void UISetup()
{
tl.removeAllViews();
dbline();
TableRow titr = new TableRow(this);
titr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
TextView dbid0 = new TextView(this);
TextView dbdevid0 = new TextView(this);
TextView dbindate0 = new TextView(this);
dbid0.setText("| " + "_id");
dbdevid0.setText("| " + "device_id");
dbindate0.setText("| "+ "install_date"+" |");
titr.addView(dbid0);
titr.addView(dbdevid0);
titr.addView(dbindate0);
tl.addView(titr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
dbline();
}
@SuppressWarnings("deprecation")
public void UIAdd(long diffr, String dbidn,String did,String idate)
{
long days;
days = diffr / ONE_DAY;
TableRow tr = new TableRow(this);
tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
TextView dbid = new TextView(this);
TextView dbdevid = new TextView(this);
TextView dbindate = new TextView(this);
dbid.setText("| " + dbidn);
dbdevid.setText("| " + did);
dbindate.setText("| " + idate+" |");
if(days <= 7)
{
activeinstalls++;
if(days <= 3)
{
dbid.setTextColor(Color.GREEN);
dbdevid.setTextColor(Color.GREEN);
dbindate.setTextColor(Color.GREEN);
} else {
dbid.setTextColor(Color.MAGENTA);
dbdevid.setTextColor(Color.MAGENTA);
dbindate.setTextColor(Color.MAGENTA);
}
} else {
dbid.setTextColor(Color.RED);
dbdevid.setTextColor(Color.RED);
dbindate.setTextColor(Color.RED);
}
tr.addView(dbid);
tr.addView(dbdevid);
tr.addView(dbindate);
tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
}
public void UIFinish()
{
dbline();
TextView te = (TextView)findViewById(R.id.totalentries);
te.setText(String.valueOf(ID-1));
TextView au = (TextView)findViewById(R.id.activeusers);
au.setText(String.valueOf(activeinstalls));
}
@SuppressWarnings("deprecation")
public void dbline()
{
TableLayout tl=(TableLayout)findViewById(R.id.db_data);
TableRow tr = new TableRow(this);
tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
TextView dbid = new TextView(this);
TextView dbdevid = new TextView(this);
TextView dbindate = new TextView(this);
dbid.setText("+---------");
dbdevid.setText("+-------------------------------");
dbindate.setText("+--------------------+");
tr.addView(dbid);
tr.addView(dbdevid);
tr.addView(dbindate);
tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
}
public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
// Do network oprations here
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
// Update UI here
super.onPostExecute(result);
}
}