2015-10-20 99 views
0

我正在尝试构建一个应用程序,以通知无法访问网络上的信息的人。我已经完成了90%,所有即将到来的错误都得到了解决。当我启动并点击微调值时,我的应用程序崩溃。致命例外:AsyncTask#1 - Android应用程序在点击微调时崩溃

我的日志猫:

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) 

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); 
    } 

} 
} 
+0

你不必调用'super.onPostExecute(...)',但它看起来像你的错误是从你的'doInBackground'方法产生的,所以我会逐步通过它,看看它在哪里破坏 – ElliotM

+0

谢谢很多@ElliotM我做了你的建议,但我无法理解doinbackgroud方法有什么问题,你能不能展示一些光... –

+0

尝试调试和步进通过,同时google解决方案'getSlotFromBufferLocked:unknown buffer' – ElliotM

回答

相关问题