我是Android编程的新手,我想创建一个非常简单的应用程序,在String
中使用EditText
,当我点击button
时,它需要{{1并将其发送到我的String
以将其保存在我的数据库中。
但它为localhost
提供了运行时错误,我不明白为什么。求你帮帮我。
这是我的日志:
doInBackground()
我的代码是:
07-28 12:27:21.591: E/AndroidRuntime(2267): FATAL EXCEPTION: AsyncTask #1
07-28 12:27:21.591: E/AndroidRuntime(2267): Process: com.appeight.jsontest, PID: 2267
07-28 12:27:21.591: E/AndroidRuntime(2267): java.lang.RuntimeException: An error occured while executing doInBackground()
07-28 12:27:21.591: E/AndroidRuntime(2267): at android.os.AsyncTask$3.done(AsyncTask.java:300)
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
07-28 12:27:21.591: E/AndroidRuntime(2267): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.lang.Thread.run(Thread.java:841)
07-28 12:27:21.591: E/AndroidRuntime(2267): Caused by: java.lang.StringIndexOutOfBoundsException: length=0; index=3
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.lang.String.indexAndLength(String.java:584)
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.lang.String.substring(String.java:1449)
07-28 12:27:21.591: E/AndroidRuntime(2267): at com.appeight.jsontest.JSONParser.makeHttpRequest(JSONParser.java:79)
07-28 12:27:21.591: E/AndroidRuntime(2267): at com.appeight.jsontest.AddScreen$CreateNewProduct.doInBackground(AddScreen.java:50)
07-28 12:27:21.591: E/AndroidRuntime(2267): at com.appeight.jsontest.AddScreen$CreateNewProduct.doInBackground(AddScreen.java:1)
07-28 12:27:21.591: E/AndroidRuntime(2267): at android.os.AsyncTask$2.call(AsyncTask.java:288)
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-28 12:27:21.591: E/AndroidRuntime(2267): ... 4 more
有人,请帮助,我在这里真的很难受,而且我是新手,所以请原谅我任何愚蠢的错误。
答案 0 :(得分:1)
你在这里犯的错误很少:
doInBackground
中,您不应该访问用户界面doInBackground
期望字符串结果时,您返回null postExecute
。这是一种干净的方式来做同样的事情
public void addToDb(View vvv)
{
//Get the value from the textView
name = tv.getText().toString();
//build Params
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", name));
CreateNewProduct productTask = new CreateNewProduct(params);
productTask.execute();
}
class CreateNewProduct extends AsyncTask<String, String, JSONObject>
{
List<NameValuePair> params;
public CreateNewProduct(List<NameValuePair> params){
this.params = params;
}
protected JSONObject doInBackground(String... args)
{
JSONObject json = jsonParser.makeHttpRequest(add_name,"POST", this.params);
return json;
}
protected void onPostExecute(JSONObject result)
{
//this assumes that the response looks like this:
//{"success" : true }
boolean success = result.getBoolean("success");
Toast.makeText(getBaseContext(), success ? "Successful" : "Failure", Toast.LENGTH_SHORT).show();
}
}
答案 1 :(得分:0)
使用try环绕doInBackground的内容并捕获异常,并且不要忘记使用以下命令关闭对话框: pDialog.dismiss(); 在onPostExecute()
答案 2 :(得分:0)
com.appeight.jsontest.JSONParser对象访问长度为0的字符串,但它正在尝试访问索引3.这是您编写的类还是库?如果你写了一个类,试着找出原因(检查其中的行代码)。
07-28 12:27:21.591: E/AndroidRuntime(2267): Caused by: java.lang.StringIndexOutOfBoundsException: length=0; index=3
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.lang.String.indexAndLength(String.java:584)
07-28 12:27:21.591: E/AndroidRuntime(2267): at java.lang.String.substring(String.java:1449)
07-28 12:27:21.591: E/AndroidRuntime(2267): at com.appeight.jsontest.JSONParser.makeHttpRequest(JSONParser.java:79)