Java 致命异常:AsyncTask#1-Android应用程序在单击微调器时崩溃

Java 致命异常:AsyncTask#1-Android应用程序在单击微调器时崩溃,java,android,android-layout,android-asynctask,Java,Android,Android Layout,Android Asynctask,我正在尝试构建一个应用程序,用于通知无法访问网络上可用信息的人。我已经完成了90%,所有即将出现的错误都已解决。当我启动并单击微调器值时,我的应用程序崩溃 我的日志猫是: 10-20 20:38:57.298 13722-13742/trial.spinners E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab98af70 10-20 20:38:58.966 13722-13722/trial.spinners E/ANAME =

我正在尝试构建一个应用程序,用于通知无法访问网络上可用信息的人。我已经完成了90%,所有即将出现的错误都已解决。当我启动并单击微调器值时,我的应用程序崩溃

我的日志猫是:

10-20 20:38:57.298 13722-13742/trial.spinners E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab98af70
10-20 20:38:58.966 13722-13722/trial.spinners E/ANAME =: sector-18
10-20 20:38:59.001 13722-15968/trial.spinners E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
10-20 20:38:59.001 13722-15968/trial.spinners E/AndroidRuntime: Process: trial.spinners, PID: 13722
10-20 20:38:59.001 13722-15968/trial.spinners E/AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground()
10-20 20:38:59.001 13722-15968/trial.spinners E/AndroidRuntime:     at android.os.AsyncTask$3.done(AsyncTask.java:309)
10-20 20:38:59.001 13722-15968/trial.spinners E/AndroidRuntime:     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)

公共类服务器请求{
进行对话进行对话;
公共静态最终int连接\u超时=15000;
公共静态最终字符串服务器\u地址=”http://kamster.net16.net/";
公共服务器请求(上下文)
{
progressDialog=新建progressDialog(上下文);
progressDialog.setCancelable(假);
progressDialog.setTitle(“处理”);
progressDialog.setMessage(“请稍候…”);
}
public void fetchDataInBackground(联系联系人,GetUserCallback)
{
progressDialog.show();
新建FetchDataAsyncTask(联系人,回调).execute();
}
公共类FetchDataAsyncTask扩展了AsyncTask
{
接触;
GetUserCallback回调;
联系人返回联系人;
公共FetchDataAsyncTask(联系人、GetUserCallback回调)
{
this.contact=contact;
this.callback=回调;
}
@凌驾
受保护触点背景(无效…无效){
ArrayList data_to_send=新建ArrayList();
要发送的数据添加(新的BasicNameValuePair(“areaname”,contact.areaname));
添加数据(新的BasicNameValuePair(“距离”,contact.distance));
HttpParams httpRequestParams=新的BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpRequestParams,连接超时);
HttpConnectionParams.setSoTimeout(httpRequestParams,连接超时);
HttpClient客户端=新的默认HttpClient(httpRequestParams);
HttpPost=newhttppost(服务器地址+“newInput.php”);
//Contact returnedContact=null;
试一试{
post.setEntity(新的UrlEncodedFormEntity(数据发送));
HttpResponse HttpResponse=client.execute(post);
HttpEntity entity=httpResponse.getEntity();
字符串结果=EntityUtils.toString(实体);
试一试{
JSONObject JSONObject=新JSONObject(结果);
returnedContact=null;
if(jsonObject.length()=0){
returnedContact=null;
}否则{
//字符串区域名称、距离;
//areaname=null;
//距离=零;
//if(jsonObject.has(“areaname”))
//areaname=jsonObject.getString(“areaname”);
//if(jsonObject.has(“距离”))
//距离=jsonObject.getString(“距离”);
//returnedContact=新联系人(区域名称、距离);
returnedContact=新联系人(Contact.areaname、Contact.distance);
}
}捕获(JSONException jE){
jE.printStackTrace();
}
}
捕获(IOE异常)
{
e、 printStackTrace();
}
返回联系人;
}
@凌驾
PostExecute上受保护的void(联系人返回联系人){
progressDialog.disclose();
callback.done(returnedContact);
super.onPostExecute(returnedContact);
}
}
}

我认为问题在于检索到的Json数据。 你可以参考这篇文章:


希望它能帮助你

您不必调用
super.onPostExecute(…)
,但是看起来你的错误是从你的
doInBackground
方法中产生的,所以我会仔细检查一下,看看它在哪里出了问题谢谢你@ElliotM我做了你的建议,但我无法理解doInBackground方法的错在哪里。你能给我一些提示吗……试着调试一下,然后仔细检查一下,另外,谷歌
getSlotFromBufferLocked解决方案:未知缓冲区
public class ServerRequests {
ProgressDialog progressDialog;
public static final int CONNECTION_TIMEOUT = 15000;
public static final String SERVER_ADDRESS = "http://kamster.net16.net/";


public ServerRequests(Context context)
{
    progressDialog = new ProgressDialog(context);
    progressDialog.setCancelable(false);
    progressDialog.setTitle("Processing");
    progressDialog.setMessage("Please wait..");

}


public void fetchDataInBackground(Contact contact , GetUserCallback callback)
{
    progressDialog.show();
    new FetchDataAsyncTask(contact, callback).execute();


}

public class FetchDataAsyncTask extends AsyncTask<Void , Void , Contact>
{
    Contact contact;
    GetUserCallback callback;
    Contact returnedContact;

    public FetchDataAsyncTask(Contact contact , GetUserCallback callback)
    {
        this.contact = contact;
        this.callback = callback;
    }

    @Override
    protected Contact doInBackground(Void... voids) {
        ArrayList<NameValuePair> data_to_send = new ArrayList<NameValuePair>();
        data_to_send.add(new BasicNameValuePair("areaname" , contact.areaname));
        data_to_send.add(new BasicNameValuePair("distance" , contact.distance));

        HttpParams httpRequestParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpRequestParams , CONNECTION_TIMEOUT);
        HttpConnectionParams.setSoTimeout(httpRequestParams , CONNECTION_TIMEOUT);

        HttpClient client = new DefaultHttpClient(httpRequestParams);
        HttpPost post = new HttpPost(SERVER_ADDRESS + "newInput.php");

       // Contact returnedContact = null;
        try {
            post.setEntity(new UrlEncodedFormEntity(data_to_send));
            HttpResponse httpResponse = client.execute(post);

            HttpEntity entity = httpResponse.getEntity();
            String result = EntityUtils.toString(entity);

            try {
                JSONObject jsonObject = new JSONObject(result);
                returnedContact = null;

                if (jsonObject.length() == 0) {
                    returnedContact = null;

                } else {
                    // String areaname,distance;
                    //  areaname = null;
                    // distance=null;

                    // if(jsonObject.has("areaname"))
                    //  areaname = jsonObject.getString("areaname");
                    // if(jsonObject.has("distance"))
                    // distance =jsonObject.getString("distance");

                    // returnedContact = new Contact(areaname,distance);
                    returnedContact = new Contact(contact.areaname, contact.distance);

                }
            }catch(JSONException jE){
                jE.printStackTrace();
            }

        }
        catch(IOException e)
        {
            e.printStackTrace();
        }

        return returnedContact;
    }
    @Override
    protected void onPostExecute(Contact returnedContact) {
        progressDialog.dismiss();
        callback.done(returnedContact);
        super.onPostExecute(returnedContact);
    }

}
}