不幸的是,示例应用程序已停止android emulator

不幸的是,示例应用程序已停止android emulator,android,android-asynctask,Android,Android Asynctask,我试图运行我的应用程序,但当我在错误日志中执行此过程时,收到一条消息“不幸的是,应用程序已停止”,错误致命异常异步任务#1为什么?有什么解决办法吗 这是一份完整的日志 08-30 09:15:30.957: E/AndroidRuntime(580): FATAL EXCEPTION: AsyncTask #1 08-30 09:15:30.957: E/AndroidRuntime(580): java.lang.RuntimeException: An error occured while

我试图运行我的应用程序,但当我在错误日志中执行此过程时,收到一条消息“不幸的是,应用程序已停止”,错误致命异常异步任务#1为什么?有什么解决办法吗

这是一份完整的日志

08-30 09:15:30.957: E/AndroidRuntime(580): FATAL EXCEPTION: AsyncTask #1
08-30 09:15:30.957: E/AndroidRuntime(580): java.lang.RuntimeException: An error occured while executing doInBackground()
08-30 09:15:30.957: E/AndroidRuntime(580):  at android.os.AsyncTask$3.done(AsyncTask.java:278)
08-30 09:15:30.957: E/AndroidRuntime(580):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-30 09:15:30.957: E/AndroidRuntime(580):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-30 09:15:30.957: E/AndroidRuntime(580):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
08-30 09:15:30.957: E/AndroidRuntime(580):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-30 09:15:30.957: E/AndroidRuntime(580):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
08-30 09:15:30.957: E/AndroidRuntime(580):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-30 09:15:30.957: E/AndroidRuntime(580):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-30 09:15:30.957: E/AndroidRuntime(580):  at java.lang.Thread.run(Thread.java:856)
08-30 09:15:30.957: E/AndroidRuntime(580): Caused by: java.lang.NullPointerException
08-30 09:15:30.957: E/AndroidRuntime(580):  at com.example.example.Login$AttemptLogin.doInBackground(Login.java:125)
08-30 09:15:30.957: E/AndroidRuntime(580):  at com.example.example.Login$AttemptLogin.doInBackground(Login.java:1)
08-30 09:15:30.957: E/AndroidRuntime(580):  at android.os.AsyncTask$2.call(AsyncTask.java:264)
08-30 09:15:30.957: E/AndroidRuntime(580):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-30 09:15:30.957: E/AndroidRuntime(580):  ... 5 more
Login.java

package com.example.example;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
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;

public class Login extends Activity implements OnClickListener {

private EditText user, pass;
private Button mSubmit, mRegister;
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();

private static final String LOGIN_URL = "http://10.0.2.2/android/login.php";
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.login);

user = (EditText) findViewById(R.id.username);
pass = (EditText) findViewById(R.id.password);

mSubmit = (Button) findViewById(R.id.login);
mRegister = (Button) findViewById(R.id.register);

mSubmit.setOnClickListener(this);
mRegister.setOnClickListener(this);

}

@Override
public void onClick(View v) {

switch (v.getId()) {
case R.id.login:
    new AttemptLogin().execute();
    break;
case R.id.register:
    Intent i = new Intent(this, Register.class);
    startActivity(i);
    break;

default:
    break;
}
}

class AttemptLogin extends AsyncTask<String, String, String> {

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

@Override
protected String doInBackground(String... v) {

    int success;
    String username = user.getText().toString();
    String password = pass.getText().toString();
    try {

        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("username", username));
        params.add(new BasicNameValuePair("password", password));

        Log.d("request!", "starting");

        JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST",
                params);

        Log.d("Login attempt", json.toString());


        success = json.getInt(TAG_SUCCESS);
        if (success == 1) {
            Log.d("Login Successful!", json.toString());

            SharedPreferences sp = PreferenceManager
                    .getDefaultSharedPreferences(Login.this);
            Editor edit = sp.edit();
            edit.putString("username", username);
            edit.commit();

            Intent i = new Intent(Login.this, ReadComment.class);
            finish();
            startActivity(i);
            return json.getString(TAG_MESSAGE);
        } else {
            Log.d("Login Failure!", json.getString(TAG_MESSAGE));
            return json.getString(TAG_MESSAGE);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return null;

}

protected void onPostExecute(String file_url) {

    pDialog.dismiss();
    if (file_url != null) {
        Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
    }

}

}

}
package com.example.example;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.NameValuePair;
导入org.apache.http.message.BasicNameValuePair;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.content.SharedReferences.Editor;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.preference.PreferenceManager;
导入android.util.Log;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Toast;
公共类登录扩展活动实现OnClickListener{
私人编辑文本用户,通过;
私人按钮mSubmit,mRegister;
私人对话;
JSONParser JSONParser=新的JSONParser();
私有静态最终字符串登录\u URL=”http://10.0.2.2/android/login.php";
私有静态最终字符串标记_SUCCESS=“SUCCESS”;
私有静态最终字符串标记_MESSAGE=“MESSAGE”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
user=(EditText)findViewById(R.id.username);
pass=(EditText)findViewById(R.id.password);
mSubmit=(按钮)findviewbyd(R.id.login);
mRegister=(按钮)findviewbyd(R.id.register);
mSubmit.setOnClickListener(这个);
mRegister.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.login:
新建AttemptLogin().execute();
打破
案例R.id.登记册:
意图i=新意图(这是Register.class);
星触觉(i);
打破
违约:
打破
}
}
类AttemptLogin扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=newprogressdialog(Login.this);
setMessage(“正在尝试登录…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
@凌驾
受保护字符串背景(字符串…v){
成功;
字符串username=user.getText().toString();
字符串密码=pass.getText().toString();
试一试{
List params=new ArrayList();
添加(新的BasicNameValuePair(“用户名”,用户名));
添加(新的BasicNameValuePair(“密码”,password));
Log.d(“请求!”,“启动”);
JSONObject json=jsonParser.makeHttpRequest(登录地址,“POST”,
参数);
Log.d(“登录尝试”,json.toString());
success=json.getInt(TAG_success);
如果(成功==1){
Log.d(“登录成功!”,json.toString();
SharedReferences sp=首选项管理器
.getDefaultSharedReferences(Login.this);
Editor edit=sp.edit();
edit.putString(“用户名”,用户名);
edit.commit();
Intent i=新Intent(Login.this,ReadComment.class);
完成();
星触觉(i);
返回json.getString(TAG_消息);
}否则{
Log.d(“登录失败!”,json.getString(TAG_MESSAGE));
返回json.getString(TAG_消息);
}
}捕获(JSONException e){
e、 printStackTrace();
}
返回null;
}
受保护的void onPostExecute(字符串文件\u url){
pDialog.disclose();
如果(文件url!=null){
Toast.makeText(Login.this,file_url,Toast.LENGTH_LONG.show();
}
}
}
}

您在文件
Login.java
的第125行中得到一个
NullPointerException
。转到您的代码,并尝试确定代码中此行中的值如何可以为null

我怎么知道的

跟踪包含以下代码:

Caused by: java.lang.NullPointerException
...  at com.example.example.Login$AttemptLogin.doInBackground(Login.java:125)
试试这个:-

class AttemptLogin extends AsyncTask<String, void, String> 
class AttemptLogin扩展了AsyncTask
异步任务使用的三种类型如下:

  • Params,执行时发送到任务的参数类型
  • 进度,后台计算期间发布的进度单位的类型
  • 结果,背景计算结果的类型

  • 请添加代码,并指向发生NPE的行。我应该更改什么?毕竟我不明白,因为我是android新手,请问哪一行是第125行?可能是这个Log.d(“Login-trunt”,json.toString());好吧,看起来json是空的。仍然没有发生任何事情。请确保收到的json不是空的。。编辑此“”。。更改POST以进入该文件并使用浏览器回显生成的json。。去确保有东西被归还@LuhungHaryo