java json 解析空对象,错误解析JSON到Java对象:显示java.lang.NullPointerException

I'm creating login system for my application. It's sends the login information to the API and return a json.

This is LoginActivity.java

public class LoginActivity extends Activity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.login);

// Login Button Click event

Button btnLogin = (Button) findViewById(R.id.btnLogin);

btnLogin.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

this.retrieveLogin();

}

private void retrieveLogin() {

LoginAsyncTask task = new LoginAsyncTask();

task.execute();

}

});

// Link to Register Screen

Button btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegister);

btnLinkToRegister.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

Intent i = new Intent(getApplicationContext(),RegisterActivity.class);

startActivity(i);

finish();

}

});

}

private class LoginAsyncTask extends AsyncTask {

Login login2;

private Activity activity;

final EditText inputEmail = (EditText) findViewById(R.id.loginEmail);

final EditText inputPassword = (EditText) findViewById(R.id.loginPassword);

final TextView loginErrorMsg = (TextView) findViewById(R.id.login_error);

String email = inputEmail.getText().toString();

String pwrd = inputPassword.getText().toString();

@Override

protected Void doInBackground(Void... params) {

//System.out.println(loginURL);

try {

//Create an HTTP client

DefaultHttpClient client = new DefaultHttpClient();

HttpPost post = new HttpPost(loginURL);

//Perform the request and check the status code

HttpResponse response = client.execute(post);

StatusLine statusLine = response.getStatusLine();

if(statusLine.getStatusCode() == 200) {

HttpEntity entity = response.getEntity();

InputStream content = entity.getContent();

try {

//Read the server response and attempt to parse it as JSON

Reader reader = new InputStreamReader(content);

Gson gson = new Gson();

this.login2 = gson.fromJson(reader, Login.class);

} catch (Exception ex) {

Log.e(TAG, "Failed to parse JSON due to: " + ex);

failedLoading();

}

} else {

Log.e(TAG, "Server responded with status code: " + statusLine.getStatusCode());

failedLoading();

}

} catch(Exception ex) {

Log.e(TAG, "Failed to send HTTP POST request due to: " + ex);

failedLoading();

}

return null;

}

@Override

protected void onPostExecute(Void result) {

}

}

@Override

protected void onPause() {

super.onPause();

//finish();

}

private void failedLoading() {

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(LoginActivity.this, "Failed to Register. look at LogCat.", Toast.LENGTH_SHORT).show();

}

});

}

}

If I enter invalid data for login its return following json:

{

"result":"KO",

"message":["Make sure you did not misspell your password."]

}

The message is display on the textview successfully.

But when I enter valid data for login its return following json:

{

"result":"OK",

"message":["Successfull login."],

"values":{"id":"1809","fname":"me","gender":"male"}

}

In this situation my application force closes and gets following logcat:

09-30 12:55:05.445: E/AndroidRuntime(14593): FATAL EXCEPTION: main

09-30 12:55:05.445: E/AndroidRuntime(14593): java.lang.NullPointerException

09-30 12:55:05.445: E/AndroidRuntime(14593): at com.kabelash.sk.LoginActivity$LoginAsyncTask.onPostExecute(LoginActivity.java:128)

09-30 12:55:05.445: E/AndroidRuntime(14593): at com.kabelash.sk.LoginActivity$LoginAsyncTask.onPostExecute(LoginActivity.java:1)

09-30 12:55:05.445: E/AndroidRuntime(14593): at android.os.AsyncTask.finish(AsyncTask.java:631)

09-30 12:55:05.445: E/AndroidRuntime(14593): at android.os.AsyncTask.access$600(AsyncTask.java:177)

09-30 12:55:05.445: E/AndroidRuntime(14593): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)

09-30 12:55:05.445: E/AndroidRuntime(14593): at android.os.Handler.dispatchMessage(Handler.java:99)

09-30 12:55:05.445: E/AndroidRuntime(14593): at android.os.Looper.loop(Looper.java:137)

09-30 12:55:05.445: E/AndroidRuntime(14593): at android.app.ActivityThread.main(ActivityThread.java:4898)

09-30 12:55:05.445: E/AndroidRuntime(14593): at java.lang.reflect.Method.invokeNative(Native Method)

09-30 12:55:05.445: E/AndroidRuntime(14593): at java.lang.reflect.Method.invoke(Method.java:511)

09-30 12:55:05.445: E/AndroidRuntime(14593): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)

09-30 12:55:05.445: E/AndroidRuntime(14593): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)

09-30 12:55:05.445: E/AndroidRuntime(14593): at dalvik.system.NativeStart.main(Native Method)

But I couldn't find any solution for it. Someone please help.

解决方案

I need your Values class. Because your variable maybe integer decleration in class. In Json data id is string

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值