Java LoginTask(异步任务)空指针

Java LoginTask(异步任务)空指针,java,android,json,android-asynctask,Java,Android,Json,Android Asynctask,我试图修复这个bug,但我知道为什么有些东西nullpointer,有些可以返回json成功 public class Login extends Activity { public TextView loginErrorMsg; private ProgressDialog progressDialog; private JSONObject jsonResult; @Override public void onCreate(Bundle savedInstanceState) {

我试图修复这个bug,但我知道为什么有些东西nullpointer,有些可以返回
json
成功

public class Login extends Activity {
public TextView loginErrorMsg;
private ProgressDialog progressDialog;
private JSONObject jsonResult;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bus_login);
            //findViewById
}

public void btnLogin_OnClick(View v) {

    new LoginTask().execute();
}

class LoginTask extends AsyncTask<String, String, JSONObject> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = new ProgressDialog(Login.this);
        progressDialog.setMessage("Logging in...");
        progressDialog.setIndeterminate(false);
        progressDialog.setCancelable(true);
        progressDialog.show();
    }


    protected JSONObject doInBackground(String... args) {
        // TODO Auto-generated method stub
        String uname = inputUserId.getText().toString();
        String password =inputPassword.getText().toString();
        UserFunctions vehicleFunction = new UserFunctions();
        jsonResult = vehicleFunction.loginVehicle(uname, password);

        return jsonResult;
    }

    protected void onPostExecute(JSONObject jsonResult) {
        // dismiss the dialog once done
        progressDialog.dismiss();

        try {

            int success = jsonResult.getInt("success");
            if (success == 1) {
                loginErrorMsg.setText("success");

            } else{
                loginErrorMsg.setText("Fail");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }



    }

}
公共类登录扩展活动{
公共文本视图loginErrorMsg;
私有进程对话;
私有JSONObject jsonResult;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.bus_登录);
//findviewbyd
}
公共无效Btnogin_OnClick(视图五){
新登录任务().execute();
}
类LoginTask扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog=新建progressDialog(Login.this);
progressDialog.setMessage(“登录…”);
progressDialog.setUndeterminate(false);
progressDialog.setCancelable(真);
progressDialog.show();
}
受保护的JSONObject doInBackground(字符串…args){
//TODO自动生成的方法存根
字符串uname=inputUserId.getText().toString();
字符串密码=inputPassword.getText().toString();
UserFunctions vehicleFunction=新的UserFunctions();
jsonResult=vehicleFunction.loginHicle(uname,密码);
返回jsonResult;
}
受保护的void onPostExecute(JSONObject jsonResult){
//完成后关闭对话框
progressDialog.disclose();
试一试{

int success=jsonResult.getInt(“success”); 如果(成功==1){ loginErrorMsg.setText(“成功”); }否则{ loginErrorMsg.setText(“失败”); } }捕获(例外e){ e、 printStackTrace(); } } }
}

publicJSONObject登录车辆(字符串vehicleId,字符串密码){
List params=new ArrayList();
添加(新的BasicNameValuePair(“标签”,登录标签));
参数添加(新的BasicNameValuePair(“vehicleId”,vehicleId));
添加(新的BasicNameValuePair(“密码”,password));
JSONObject json=jsonParser.getJSONFromUrl(loginVehicleURL,参数);
返回json;
}
01-27 23:44:12.438:W/System.err(2121):java.lang.NullPointerException
01-27 23:44:12.438:W/System.err(2121):在com.ptms.Bus_Login$LoginTask.onPostExecute(Bus_Login.java:79)
01-27 23:44:12.448:W/System.err(2121):在com.ptms.Bus_Login$LoginTask.onPostExecute(Bus_Login.java:1)
01-27 23:44:12.448:W/System.err(2121):位于android.os.AsyncTask.finish(AsyncTask.java:602)
01-27 23:44:12.458:W/System.err(2121):位于android.os.AsyncTask.access$600(AsyncTask.java:156)
01-27 23:44:12.458:W/System.err(2121):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
01-27 23:44:12.458:W/System.err(2121):位于android.os.Handler.dispatchMessage(Handler.java:99)
01-27 23:44:12.458:W/System.err(2121):位于android.os.Looper.loop(Looper.java:137)
01-27 23:44:12.458:W/System.err(2121):位于android.app.ActivityThread.main(ActivityThread.java:4424)
01-27 23:44:12.458:W/System.err(2121):位于java.lang.reflect.Method.invokenactive(本机方法)
01-27 23:44:12.458:W/System.err(2121):位于java.lang.reflect.Method.invoke(Method.java:511)
01-27 23:44:12.458:W/System.err(2121):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-27 23:44:12.458:W/System.err(2121):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-27 23:44:12.458:W/System.err(2121):在dalvik.System.NativeStart.main(本机方法)

在eclipse中调试应用程序

签入此方法。我猜它在json中返回null

public JSONObject loginVehicle(String vehicleId, String password){
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("vehicleId", vehicleId));
    params.add(new BasicNameValuePair("password", password));
    JSONObject json = jsonParser.getJSONFromUrl(loginVehicleURL, params);
    return json;
}
您正在访问包含null的jsonResult

int success = jsonResult.getInt("success");

在eclipse中调试应用程序

签入此方法。我猜它在json中返回null

public JSONObject loginVehicle(String vehicleId, String password){
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", login_tag));
    params.add(new BasicNameValuePair("vehicleId", vehicleId));
    params.add(new BasicNameValuePair("password", password));
    JSONObject json = jsonParser.getJSONFromUrl(loginVehicleURL, params);
    return json;
}
您正在访问包含null的jsonResult

int success = jsonResult.getInt("success");


请您指出Bus_Login.java class.Bus_Login.java=Login.java79行,好吗?我问79.int success=jsonResult.getInt(“success”)行写了什么;您的问题是jsonResult为null。调试你的应用程序并检查你在哪里检索json数据,然后你就会找到答案。请你指出Bus_Login.java class.Bus_Login.java=Login.javaI问79.int success=jsonResult.getInt(“success”)行的第79行写了什么;您的问题是jsonResult为null。调试应用程序并检查从何处检索json数据,然后您将找到答案。但是如果我在btnLogin_OnClick'String uname=inputUserId.getText().toString()中添加代码;字符串密码=inputPassword.getText().toString();UserFunctions vehicleFunction=新的UserFunctions();jsonResult=vehicleFunction.loginHicle(uname,password);'并添加'StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(策略);'在OnCreate中,我可以成功地获得json。如果我想测试是否可以获得json返回,我需要启用严格模式,因为android>=3.0。我得到的结果是肯定的。我可以得到返回的json,而不是null。我需要完成asynctask,因为我需要运行这个app>=android3。如果启用严格模式并在asyncTask中执行,仍然返回nullpointer。如果我把它放到btnLogin_onclick中,我可以得到返回的json。无论如何,thx Againit是因为我认为您正在运行应用程序android>=3.0。如果在主线程android>=3.0上执行网络操作,现在该线程是允许的,因此它在json中给出null。现在,您可以使用strict模式进行网络操作并获得正确的json。在异步类中获取json的另一种方法是,无需编写“StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(策略);'。在异步类中进行网络操作总是比较好的。问题是,如果在异步类中获取json,无论是否