Java Android中的关闭VM和致命异常
每次我看到日志猫出现致命异常和关闭虚拟机的消息时,我都尝试使用bt,因为有一些解决方案关于这个错误,我找不到它,请帮助我摆脱它,我是android新手,所以可能是我犯了一个小错误,所以请给我解决方案 下面是我的代码 main.javaJava Android中的关闭VM和致命异常,java,android,Java,Android,每次我看到日志猫出现致命异常和关闭虚拟机的消息时,我都尝试使用bt,因为有一些解决方案关于这个错误,我找不到它,请帮助我摆脱它,我是android新手,所以可能是我犯了一个小错误,所以请给我解决方案 下面是我的代码 main.java package com.login.demo; import impl.dao.InspectionVO; import impl.dao.Inspection_damages; import impl.dbOperation.Operation; import
package com.login.demo;
import impl.dao.InspectionVO;
import impl.dao.Inspection_damages;
import impl.dbOperation.Operation;
import impl.internetcheck.CkeckNetConnection;
import impl.urlConnection.CommonUtill;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.gson.Gson;
public class main extends Activity implements OnClickListener
{
EditText unm, pwd;
String webResponse1 = "NA";
String uname, password;
Operation op = new Operation(this);
SharedPreferences pref;
static String jsonstr;
public static String msg = "nothing";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
unm = (EditText) findViewById(R.id.editText1);
pwd = (EditText) findViewById(R.id.editText2);
Button lgn = (Button) findViewById(R.id.button1);
op.getContainerid();
//****Check for Connection at First time********
lgn.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
uname = unm.getText().toString().trim();
password= pwd.getText().toString().trim();
if (v.getId() == R.id.button1)
{
String status = CkeckNetConnection.getConnectivityStatusString(main.this);
if (status.equals("Mobile"))
{
MyAsynTask obj = new MyAsynTask();
//Testing?param1=admin¶m2=admin
String login = "firstLogin?param1=" + uname + "¶m2=" + password;
//String login = "Testing?param1="+uname+"¶m2="+password;
// String SubURL ="insertInsp?param1="+str1;
Log.i("check 1", "Info 1");
try
{
msg = "Login..";
obj.execute(login).get();
Log.i("Login object", "Text set : " + jsonstr);
if (jsonstr.equals("true"))
{
Log.i("ketan", "Inside condition");
String inspid = op.getContainerid();
Log.i("id", inspid);
int ids=Integer.parseInt(inspid);
int id=1;
if(ids>0)
{
//Log.i("Test1","Here");
while(id<=ids)
{
InspectionVO insp=op.getInspection(id);
Gson gson=new Gson();
//String jsonStr=gson.toJson(insp);
StringBuilder tmp = new StringBuilder();
tmp.append(gson.toJson(insp));
Log.i("Stringssss", tmp.toString());
StringBuilder sb = new StringBuilder();
sb.append("insertInsp?param1="+java.net.URLEncoder.encode(tmp.toString()));
MyAsynTask inspection=new MyAsynTask();
inspection.execute(sb.toString()).get();
ArrayList<Inspection_damages> ar=op.getImages(id);
for(Integer k=0;k<ar.size();k++)
{
ar.get(k).setInsp_id(jsonstr);
StringBuilder tmp1 = new StringBuilder();
tmp1.append(gson.toJson(ar.get(k)));
Log.i("Stringssss", ar.get(k).getD_code());
Log.i("Stringssss", tmp1.toString());
StringBuilder sb1 = new StringBuilder();
sb1.append("insertInspDamage?param1="+java.net.URLEncoder.encode(tmp1.toString()));
Log.i("left", sb1.toString());
MyAsynTask obj1=new MyAsynTask();
obj1.execute(sb1.toString()).get();
}
id++;
}
}
/* msg="recieving data..";
String uid = op.getusersid();
Log.i("Response","check it"+uid);
MyAsynTask user = new MyAsynTask();
String users = "getUsers?param1="+uid;
user.execute(users).get();
Log.i("Response", jsonstr);
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<UserVO>>() {}.getType();
ArrayList<UserVO> ar = gson.fromJson(jsonstr,type);
if(!(ar==null))
{
op.InsertUsers(ar);
}
/* MyAsynTask cont=new MyAsynTask();
String conts="getCT?";
cont.execute(conts).get();
Log.i("Response", jsonstr);
Type types = new TypeToken<ArrayList<InspectionVO>>() {}.getType();
ArrayList<InspectionVO> cnar= gson.fromJson(jsonstr,types);
op.InsertCT(cnar);*/
Intent i=new Intent(getApplicationContext(),mainbutton.class);
startActivity(i);
Toast.makeText(getApplicationContext(), "successfully login",10).show();
}
else
{
Log.i("Login status", "fail");
Toast.makeText(main.this, "Wrong username or password", Toast.LENGTH_LONG).show();
unm.setText("");
pwd.setText("");
}
/*String users="getUsers?";
obj.execute(users).get();
Log.i("Response", jsonstr);
Gson gson = new Gson();
Type type = new TypeToken<ArrayList<UserVO>>() {}.getType();
ArrayList<UserVO> ar = gson.fromJson(jsonstr,type);
*/
} catch (InterruptedException e)
{
e.printStackTrace();
} catch (ExecutionException e)
{
e.printStackTrace();
}
}
else if(status.equals("Not"))
{
Intent i=new Intent(getApplicationContext(),mainbutton.class);
startActivity(i);
Toast.makeText(getApplicationContext(), "successfully login",10).show();
/* Toast.makeText(main.this, "No Net Connection", Toast.LENGTH_LONG).show();
unm.setText("");
pwd.setText("");*/
}
}
}
private class MyAsynTask extends AsyncTask<String, Void, String>
{
ProgressDialog Asycdialog = new ProgressDialog(main.this);
@Override
protected void onPreExecute() {
//set message of the dialog
Asycdialog.setMessage(msg);
//show dialog
Asycdialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... params)
{
//String webResponse= CommonUtill.getOutputFromUrl(CommonUtill.URL+"checkLogin?param1=admin¶m2=admin");
jsonstr=CommonUtill.getOutputFromUrl(CommonUtill.URL+params[0]);
// TODO Auto-generated method stub
return null;
}
protected void onPostExecute(String result)
{
//hide the dialog
Asycdialog.dismiss();
super.onPostExecute(result);
}
}
}
尝试像这样替换所有日志
Log.i("Stringssss", tmp.toString());
与
尝试像这样替换所有日志
Log.i("Stringssss", tmp.toString());
与
尝试像这样替换所有日志
Log.i("Stringssss", tmp.toString());
与
尝试像这样替换所有日志
Log.i("Stringssss", tmp.toString());
与
您正在向Log.i发送一个空对象,该对象位于方法onClick的某个位置。 您可以通过调用String.valueOf来保护您的对象日志,它是空安全的,并返回
“null”
使用
或
而不是
Log.i(TAG, myObject);
如果您不想麻烦测试对象是否为空。您正在将一个空对象发送到Log.i方法的某个地方。 您可以通过调用String.valueOf来保护您的对象日志,它是空安全的,并返回
“null”
使用
或
而不是
Log.i(TAG, myObject);
如果您不想麻烦测试对象是否为空。您正在将一个空对象发送到Log.i方法的某个地方。 您可以通过调用String.valueOf来保护您的对象日志,它是空安全的,并返回
“null”
使用
或
而不是
Log.i(TAG, myObject);
如果您不想麻烦测试对象是否为空。您正在将一个空对象发送到Log.i方法的某个地方。 您可以通过调用String.valueOf来保护您的对象日志,它是空安全的,并返回
“null”
使用
或
而不是
Log.i(TAG, myObject);
如果您不想麻烦测试对象的空值。原因
出现此异常是因为正在将空值传递给Log,也就是说,您正在尝试记录一个对象的未初始化引用或一个现在指向空的实例,如logcat的下一行所示
07-16 02:08:18.095:E/AndroidRuntime(2160):java.lang.NullPointerException:println需要一条消息
解决方案
- 在记录日志之前始终使用空检查
如果(平淡!=null)
Log.i(“id”,inspid) - 将“”附加到正在记录的值后,这将确保记录的最终值永远不为null。然而,这是一种糟糕的方法,空对象最好按照上面所示进行检查和记录 Log.i(“id”,即“+inspid”)
Log.i("id", inspid); <<--inspid may be null
ar.get(k).setInsp_id(jsonstr);
StringBuilder tmp1 = new StringBuilder();
tmp1.append(gson.toJson(ar.get(k)));
Log.i("Stringssss", ar.get(k).getD_code()); <<--ar.get(k).getD_code() may be null
Log.i("Stringssss", tmp1.toString()); <<--tmp1 may be null
Log.i(“id”,inspid);原因
出现此异常是因为正在将空值传递给Log,也就是说,您正在尝试记录一个对象的未初始化引用或一个现在指向空的实例,如logcat的下一行所示
07-16 02:08:18.095:E/AndroidRuntime(2160):java.lang.NullPointerException:println需要一条消息
解决方案
- 在记录日志之前始终使用空检查
如果(平淡!=null)
Log.i(“id”,inspid)
- 将“”附加到正在记录的值后,这将确保记录的最终值永远不为null。然而,这是一种糟糕的方法,空对象最好按照上面所示进行检查和记录
Log.i(“id”,即“+inspid”)
代码中可能的位置
以下两个代码块看起来像是异常的理想候选
位置1:
Log.i("id", inspid); <<--inspid may be null
ar.get(k).setInsp_id(jsonstr);
StringBuilder tmp1 = new StringBuilder();
tmp1.append(gson.toJson(ar.get(k)));
Log.i("Stringssss", ar.get(k).getD_code()); <<--ar.get(k).getD_code() may be null
Log.i("Stringssss", tmp1.toString()); <<--tmp1 may be null
Log.i(“id”,inspid);原因
出现此异常是因为正在将空值传递给Log,也就是说,您正在尝试记录一个对象的未初始化引用或一个现在指向空的实例,如logcat的下一行所示
07-16 02:08:18.095:E/AndroidRuntime(2160):java.lang.NullPointerException:println需要一条消息
解决方案
- 在记录日志之前始终使用空检查
如果(平淡!=null)
Log.i(“id”,inspid)
- 将“”附加到正在记录的值后,这将确保记录的最终值永远不为null。然而,这是一种糟糕的方法,空对象最好按照上面所示进行检查和记录
Log.i(“id”,即“+inspid”)
代码中可能的位置
以下两个代码块看起来像是异常的理想候选
位置1:
Log.i("id", inspid); <<--inspid may be null
ar.get(k).setInsp_id(jsonstr);
StringBuilder tmp1 = new StringBuilder();
tmp1.append(gson.toJson(ar.get(k)));
Log.i("Stringssss", ar.get(k).getD_code()); <<--ar.get(k).getD_code() may be null
Log.i("Stringssss", tmp1.toString()); <<--tmp1 may be null
Log.i(“id”,inspid);原因
出现此异常是因为正在将空值传递给Log,也就是说,您正在尝试记录一个对象的未初始化引用或一个现在指向空的实例,如logcat的下一行所示
07-16 02:08:18.095:E/AndroidRuntime(2160):java.lang.NullPointerException:println需要一条消息
解决方案
- 在记录日志之前始终使用空检查
如果(平淡!=null)
Log.i(“id”,inspid)
- 将“”附加到正在记录的值后,这将确保记录的最终值永远不为null。然而,这是一种糟糕的方法,空对象最好按照上面所示进行检查和记录
Log.i(“id”,即“+inspid”)
代码中可能的位置
以下两个代码块看起来像是异常的理想候选
位置1:
Log.i("id", inspid); <<--inspid may be null
ar.get(k).setInsp_id(jsonstr);
StringBuilder tmp1 = new StringBuilder();
tmp1.append(gson.toJson(ar.get(k)));
Log.i("Stringssss", ar.get(k).getD_code()); <<--ar.get(k).getD_code() may be null
Log.i("Stringssss", tmp1.toString()); <<--tmp1 may be null
Log.i(“id”,inspid);尝试控制log.i()调用中的第二个参数。尝试控制log.i()调用中的第二个参数。尝试控制log.i()调用中的第二个参数。尝试控制log.i()调用中的第二个参数。