- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Android 新手,这是我的第一个项目。我正在尝试制作一个从用户那里获取输入并对 mysql 数据库执行一些操作的 android 程序,我运行了该程序但出现了这些错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.example.nada.mysqldemo.MainActivity.viewResultMessage(MainActivity.java:89)
at com.example.nada.mysqldemo.UserServiceAPI.onPostExecute(UserServiceAPI.java:83)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
谁能告诉我错误在哪里以及如何解决?我在这里附上我的代码:主 Activity .java
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText idEditText, nameEditText;
private ProgressDialog loadingDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
idEditText = (EditText) findViewById(R.id.et_id);
nameEditText = (EditText) findViewById(R.id.et_name);
loadingDialog = new ProgressDialog(this);
loadingDialog.setCancelable(false);
loadingDialog.setCanceledOnTouchOutside(false);
loadingDialog.setMessage("Please wait...");
}
public void selectOneButtonAction(View v) {
checkId();
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute(idEditText
.getText().toString().trim(), "");
}
public void selectAllButtonAction(View v) {
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute("", "");
}
public void insertButtonAction(View v) {
checkName();
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute("",
nameEditText.getText().toString().trim());
}
public void deleteButtonAction(View v) {
checkId();
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute(idEditText
.getText().toString().trim(), "");
}
public void updateButtonAction(View v) {
checkId();
checkName();
loadingDialog.show();
new UserServiceAPI(this, UserServiceAPI.SELECT_ONE).execute(idEditText
.getText().toString().trim(), nameEditText.getText().toString()
.trim());
}
private void checkId() {
if (idEditText.getText().toString().trim().length() == 0) {
showToast("Missing id");
return;
}
}
private void checkName() {
if (nameEditText.getText().toString().trim().length() == 0) {
showToast("Missing name");
return;
}
}
private void showToast(String text) {
Toast.makeText(this, text, Toast.LENGTH_LONG).show();
}
public void viewResultMessage(Object result) {
if (loadingDialog.isShowing())
loadingDialog.dismiss();
showToast(result.toString());
}
}
用户服务接口(interface)
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.util.Log;
public class UserServiceAPI extends AsyncTask<String, Integer, Object> {
public static final String INSERT = "insert";
public static final String UPDATE = "update";
public static final String DELETE = "delete";
public static final String SELECT_ONE = "selectone";
public static final String SELECT_ALL = "selectall";
private String action;
private MainActivity activity;
//private String url = "http://192.168.1.100/mysql_android/user_operations.php";
private String url = "http://10.0.2.2/mysql_android/user_operations.php";
public UserServiceAPI(MainActivity activity, String action) {
this.action = action;
this.activity = activity;
}
@Override
protected Object doInBackground(String... params) {
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("action", action));
nameValuePairs.add(new BasicNameValuePair("id", params[0]));
nameValuePairs.add(new BasicNameValuePair("name", params[1]));
String connRs = connect(url, nameValuePairs);
try {
if (action.equals(INSERT) || action.equals(UPDATE)
|| action.equals(DELETE)) {
JSONObject jsonObject = new JSONObject(connRs);
return jsonObject.getString("message");
} else if (action.equals(SELECT_ALL)) {
JSONArray jsonArray = new JSONArray(connRs);
if (jsonArray.length() == 0) {
return "No data found";
}
String rs = "";
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
rs += name;
}
return rs;
} else if (action.equals(SELECT_ONE)) {
JSONObject jsonObject = new JSONObject(connRs);
String user = jsonObject.getString("user");
if (user == null || user.equals("null")) {
return "No date for this id";
} else {
return jsonObject.getString("name");
}
}
} catch (Exception e) {
}
return null;
}
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
activity.viewResultMessage(result);
}
/**
* connect to server with url and parameters
*
* @param url
* @param params
* @return
*/
public static String connect(String url, ArrayList<NameValuePair> params) {
DefaultHttpClient httpClient = new DefaultHttpClient();
try {
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
int status = httpResponse.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
return EntityUtils.toString(httpEntity);
}
} catch (SocketTimeoutException ex) {
Log.d("RS", "SocketTimeoutException: " + ex.toString());
} catch (SocketException ex) {
Log.d("RS", "SocketException: " + ex.toString());
} catch (Exception e) {
Log.d("RS", "Connect EX: " + e.toString());
e.printStackTrace();
}
return null;
}
}
如果有人能帮上忙,我将不胜感激
最佳答案
日志信息:
at com.example.nada.mysqldemo.MainActivity.viewResultMessage(MainActivity.java:89)
指向 viewResultMessage
中的以下行:
showToast(result.toString());
这意味着result
为null
。 result
从哪里来?它来自 onPostExecute
中的这个调用:
activity.viewResultMessage(result);
结果
从哪里来?根据AsyncTask
documentation :
The specified result is the value returned by
doInBackground(Params...)
.
因此,在您的 doInBackground
方法中,您将返回 null
。问题可能出在这里:
} catch (Exception e) {
}
return null;
在这些行中,您将捕获可能发生的任何可能的异常,忽略异常并返回null
。这会导致您观察到的行为。
要解决此问题,找出此处捕获的异常并解决该问题。在这种情况下,您还可以考虑返回 null
以外的内容。
关于android - 尝试在空对象引用上调用虚拟方法 'java.lang.String java.lang.Object.toString()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28709009/
我已经为使用 JGroups 编写了简单的测试。有两个像这样的简单应用程序 import org.jgroups.*; import org.jgroups.conf.ConfiguratorFact
我有一个通过 ajax 检索的 json 编码数据集。我尝试检索的一些数据点将返回 null 或空。 但是,我不希望将那些 null 或空值显示给最终用户,或传递给其他函数。 我现在正在做的是检查
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why does one often see “null != variable” instead of “
嗨在我们公司,他们遵循与空值进行比较的严格规则。当我编码 if(variable!=null) 在代码审查中,我收到了对此的评论,将其更改为 if(null!=variable)。上面的代码对性能有影
我正在尝试使用 native Cordova QR 扫描仪插件编译项目,但是我不断收到此错误。据我了解,这是代码编写方式的问题,它向构造函数发送了错误的值,或者根本就没有找到构造函数。那么我该如何解决
我在装有 Java 1.8 的 Windows 10 上使用 Apache Nutch 1.14。我已按照 https://wiki.apache.org/nutch/NutchTutorial 中提
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: what is “=null” and “ IS NULL” Is there any difference bet
Three-EyedRaven 内网渗透初期,我们都希望可以豪无遗漏的尽最大可能打开目标内网攻击面,故,设计该工具的初衷是解决某些工具内网探测速率慢、运行卡死、服务爆破误报率高以及socks流
我想在Scala中像在Java中那样做: public void recv(String from) { recv(from, null); } public void recv(String
我正在尝试从一组图像补丁中创建一个密码本。我已将图像(Caltech 101)分成20 X 20图像块。我想为每个补丁创建一个SIFT描述符。但是对于某些图像补丁,它不返回任何描述符/关键点。我尝试使
我在验证器类中自动连接的两个服务有问题。这些服务工作正常,因为在我的 Controller 中是自动连接的。我有一个 applicationContext.xml 文件和 MyApp-servlet.
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭10 年前。 问题必须表现出对要解决的问题的最低程度的了解。告诉我们您尝试过做什么,为什么不起作用,以
大家好,我正在对数据库进行正常的选择,但是 mysql_num_rowsis 为空,我不知道为什么,我有 7 行选择。 如果您发现问题,请告诉我。 真的谢谢。 代码如下: function get_b
我想以以下格式创建一个字符串:id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&等,在for循环中,我得到
我正在尝试使用以下代码将URL转换为字符串: NSURL *urlOfOpenedFile = _service.myURLRequest.URL; NSString *fileThatWasOpen
我正在尝试将NSNumber传递到正在工作的UInt32中。然后,我试图将UInt32填充到NSData对象中。但是,这在这里变得有些时髦... 当我尝试将NSData对象中的内容写成它返回的字符串(
我正在进行身份验证并收到空 cookie。我想存储这个 cookie,但服务器没有返回给我 cookie。但响应代码是 200 ok。 httpConn.setRequestProperty(
我认为 Button bTutorial1 = (Button) findViewById(R.layout.tutorial1); bTutorial1.setOnClickListener
我的 Controller 中有这样的东西: model.attribute("hiringManagerMap",hiringManagerMap); 我正在访问此 hiringManagerMap
我想知道如何以正确的方式清空列表。在 div 中有一个列表然后清空 div 或列表更好吗? 我知道这是一个蹩脚的问题,但请帮助我理解这个 empty() 函数:) 案例)如果我运行这个脚本会发生什么:
我是一名优秀的程序员,十分优秀!