- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用我的第一个 Android 应用程序从 mysql 数据库登录用户,因此我使用用户名和密码来识别每个用户。
我的问题是 Eclipse 在这一行中抛出 NullPointerException
错误:
if (json.getString(KEY_SUCCESS) != null
日志:
FATAL EXCEPTION: AsyncTask #1
01-29 23:32:18.583: E/AndroidRuntime(17340): java.lang.RuntimeException: An error occured while executing doInBackground()
01-29 23:32:18.583: E/AndroidRuntime(17340): at android.os.AsyncTask$3.done(AsyncTask.java:278)
01-29 23:32:18.583: E/AndroidRuntime(17340): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
01-29 23:32:18.583: E/AndroidRuntime(17340): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
01-29 23:32:18.583: E/AndroidRuntime(17340): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
01-29 23:32:18.583: E/AndroidRuntime(17340): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-29 23:32:18.583: E/AndroidRuntime(17340): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
01-29 23:32:18.583: E/AndroidRuntime(17340): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-29 23:32:18.583: E/AndroidRuntime(17340): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-29 23:32:18.583: E/AndroidRuntime(17340): at java.lang.Thread.run(Thread.java:856)
01-29 23:32:18.583: E/AndroidRuntime(17340): Caused by: java.lang.NullPointerException
01-29 23:32:18.583: E/AndroidRuntime(17340): at com.example.androidhive.AsyncLogin.doInBackground(LoginScreen.java:109)
01-29 23:32:18.583: E/AndroidRuntime(17340): at com.example.androidhive.AsyncLogin.doInBackground(LoginScreen.java:1)
01-29 23:32:18.583: E/AndroidRuntime(17340): at android.os.AsyncTask$2.call(AsyncTask.java:264)
01-29 23:32:18.583: E/AndroidRuntime(17340): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-29 23:32:18.583: E/AndroidRuntime(17340): ... 5 more
<小时/>
public class LoginScreen extends Activity {
Button buttonConnecter;
EditText inputUserName, inputPassword;
TextView tv;
StringBuffer buffer;
String codsinc;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
inputUserName = (EditText) findViewById(R.id.inputUserName);
inputPassword = (EditText) findViewById(R.id.inputPassword);
buttonConnecter = (Button) findViewById(R.id.buttonConnecter);
tv = (TextView) findViewById(R.id.tv);
// Login button Click Event
buttonConnecter.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String username = inputUserName.getText().toString();
String password = inputPassword.getText().toString();
AsyncLogin LoginPass = new AsyncLogin();
Boolean Result = null;
try {
Result = LoginPass.execute(username, password).get();
if (Result == true) {
// Launch Dashboard Screen
Intent dashboard = new Intent(LoginScreen.this,
Account.class);
startActivity(dashboard);
// Close Login Screen
finish();
} else {
// Error in login
tv.setText("Password ou identifiant incorrects");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}
<小时/>
class AsyncLogin extends AsyncTask<String, Void, Boolean> {
private static String KEY_SUCCESS = "success";
protected Boolean doInBackground(String... params) {
// TODO Auto-generated method stub
UserFunctions userFunction = new UserFunctions();
Log.d("Button", "Login");
JSONObject json = userFunction.loginUser(params[0], params[1]);
// check for login response
try {
if (json.getString(KEY_SUCCESS) != null) {
String res = json.getString(KEY_SUCCESS);
if (Integer.parseInt(res) == 1) {
return true;
} else {
return false;
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
公共(public)类用户函数{
private JSONParser jsonParser;
private static String loginURL = "http://website.org/android_login_api/";
private static String login_tag = "login";
// constructor
public UserFunctions(){
jsonParser = new JSONParser();
}
/**
* function make Login Request
* @param username
* @param password
* */
public JSONObject loginUser(String username, String password){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", login_tag));
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
//Log.e("JSON", json.toString());
return json;
}
/**
* Function get Login status
* */
public boolean isUserLoggedIn(Context context){
DatabaseHandler db = new DatabaseHandler(context);
int count = db.getRowCount();
if(count > 0){
// user logged in
return true;
}
return false;
}
/**
* Function to logout user
* Reset Database
* */
public boolean logoutUser(Context context){
DatabaseHandler db = new DatabaseHandler(context);
db.resetTables();
return true;
}
}
最佳答案
检查你的 json 文本实际上是什么样子,我在网上搜索了 getJSONFromUrl 并从这里找到的源代码:
http://www.androidhive.info/2012/01/android-json-parsing-tutorial/
如果 json 错误,它实际上会返回 null。
关于java - Json.getString() 上的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14594289/
我注意到 Activity 类有两种不同的方法来获取字符串资源。这可以通过使用: getString(int resId):从应用程序包的默认字符串表中返回一个本地化字符串。 getResources
有什么值得注意的区别吗?我说的是一个花费大量时间读取查询结果的程序,并且某些运行(这些是网络点击)花费了 2 分钟以上的时间。如果我可以通过使用整数而不是字段名称来节省几秒钟,我想我可以免费获得一些时
要获取设备 ID,我通常使用以下代码段: String android_id = Settings.System.getString(getContentResolver(), Secure.ANDR
我在文件夹中有一些带有字符串的本地化文件,例如 values values-ru values-es etc. 在每个文件夹中都有一个 strings.xml 文件,其键相同但值不同。 在 Debug
我在 Assets 文件夹中使用不同的文本文件(arabic.txt,english.txt)我想更改设备语言的文件库 值/字符串文件中可以设置文件名吗? public static class Ti
我有一个扩展应用程序的类。我需要从 strings.xml 文件中获取一个字符串。 我正在使用此类来管理全局状态,因此它是通过 list 加载的。 加载时,getString() 生成一个空指针引用。
所以我在strings.xml中有很多字符串,它们的记录格式是: xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx ...... 现在我想一个一个地加载它们,而不必输入所有的字符
我有一个类,我应该在其中将一些字符串(取自 strings.xml)插入到 StringBuffer 中。这将传递给一个 Activity 。问题是我应该使用 getString() 方法,但我不能,
有没有办法以编程方式更改 R.string?因为它会抛出错误。 基本上我想这样做:String parkAdd = getString(R.string.stg_ParkAddress_+id); 因
我遇到了一个只出现在这个语法中的崩溃,在这个语句之后它崩溃了 ats+=getString(R.string.gal_grietineles , grietinele)+"\n";当我使用 ats+=
这是我的 onActivityResult 方法的代码: @Override public void onActivityResult(int requestCode, int resultCode,
我是android新手,我正在编写一个应用程序来根据纬度和经度获取地址。在 FetchAddressIntentService 类中,我在 getString() 函数中收到一个错误,指出将字符串添加
我遇到的问题是 getString() 返回的不是 id 的字符串,而是另一个字符串。但首先这是我的代码: public public class ShopFragment extends Fragm
在我的应用程序的应用程序类的 onCreate 中,我有这段代码 Locale current = getResources().getConfiguration().locale;
我想知道 getString()。我可以看到执行 getString(R.string.some_text) 是有效的。 getResources().getString(R.string.conne
基于 Android 文档: https://developer.android.com/training/basics/supporting-devices/languages https://de
我使用的是 Delphi 2009。 这对我来说适用于所有情况,除了一种情况: var BOMLength: integer; Buffer: TBytes; Encoding: TEnc
Dictionary Fields = new Dictionary();for (int i = 0; i < reader.FieldCount; i++){ Fields.Add(rea
我有一个名为 spiliaBeach 的 Place Object 实例,它接受您在下面看到的参数: public PlaceObject spiliaBeach = new PlaceObject(
我有: Toast.makeText(NewChatActivity.this, getString(R.string.invitation_sent_prompt, contact), Toast.
我是一名优秀的程序员,十分优秀!